在主环境中调用没有显式接收器的方法



当我这样做时:

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 上的实例方法。

由于mainObject类的实例,因此方法定义和调用协同工作。

您的方法:

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中。

相关内容

  • 没有找到相关文章

最新更新