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

时间:2016-02-27 22:02:13

标签: ruby main

当我这样做时:

def hello(*args)
  "Hello " + args.join(' ')
end

send( :hello, "gentle", "readers")  #=> "Hello gentle readers"

send号召的吗?我明白了:

method(:hello).owner #=> Object

是否在Object类或其实例上调用了它?

2 个答案:

答案 0 :(得分:0)

你的方法:

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

答案 1 :(得分:0)

没有显式接收器的方法调用:

main

假设一个隐式def hello(*args) "Hello " + args.join(' ') end 作为接收者,在这种情况下是Object对象。

主环境中的方法定义:

main

假设它被定义为Object上的实例方法。

由于/print/PRINT["Hello world";"blue";propety:{bold;italic}] 类的实例,因此方法定义和调用一起工作。