Ruby步骤调用中暗含的self
Ruby方法调用中暗含的self
我们先看1段代码
在ruby中一切都是对象,方法调用一定是在对象上进行的,就像下面的代码一样
那么puts 方法是由哪个对象进行调用的呢?
实际上puts是全局方法,puts定义在Kernel模块中。而ruby中全局方法是作为Object对象的私有方法定义的。puts ‘abc’执行时ruby解释器会给puts加上隐含的调用者self,因为self总是Object,所以全局方法puts总是能调用成功。
在ruby的类中,方法调用也会被隐式的加上self
在这里方法b中实际上是调用了self.a也就是调用了上面定义的方法a。
我们先看1段代码
puts 'hello public method'
在ruby中一切都是对象,方法调用一定是在对象上进行的,就像下面的代码一样
'a'.concat 'b' #在'a'这个字符串对象上调用concat方法 %w[a b c] - %w[b c] #在 array上调用-方法
那么puts 方法是由哪个对象进行调用的呢?
实际上puts是全局方法,puts定义在Kernel模块中。而ruby中全局方法是作为Object对象的私有方法定义的。puts ‘abc’执行时ruby解释器会给puts加上隐含的调用者self,因为self总是Object,所以全局方法puts总是能调用成功。
在ruby的类中,方法调用也会被隐式的加上self
Class A def a puts 'I am method a' end def b a end end instance_a = A.new instance_a.b # outputs I am method a
在这里方法b中实际上是调用了self.a也就是调用了上面定义的方法a。