当我这样做时:
def hello(*args)
"Hello " + args.join(' ')
end
send( :hello, "gentle", "readers") #=> "Hello gentle readers"
send
叫什么吗?我得到:
method(:hello).owner #=> Object
它是在Object
类上调用还是在它的实例上调用?
没有显式接收器的方法调用:
send( :hello, "gentle", "readers")
假定隐式self
作为接收方,在本例中是main
对象。
主环境中的方法定义:
def hello(*args)
"Hello " + args.join(' ')
end
假设它被定义为 Object
上的实例方法。
由于main
是Object
类的实例,因此方法定义和调用协同工作。
您的方法:
send( :hello, "gentle", "readers") #=> "Hello gentle readers"
与以下相同:
self.send( :hello, "gentle", "readers") #=> "Hello gentle readers"
其中,在这种情况下self
定义为内置顶级对象main
。
这行代码:
p method(:hello).owner #=> Object
返回 Object,因为您已在顶层定义了方法:hello
,这意味着它被放入class Object
中。