Ruby步骤调用中暗含的self

Ruby方法调用中暗含的self
我们先看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。