在ruby中,当在根范围中定义方法时,可以从该范围调用它:
def foo
"foo"
end
foo #=> "foo"
在任何其他情况下,情况并非如此:
class Bar
def foo
"foo"
end
foo #=> Error: No Method `foo` for class Bar
end
在设置允许这种情况发生的main
对象(Object
的实例)时使用了什么机制?
答案 0 :(得分:5)
这在Ruby中非常特别。如果在全局范围内定义方法,则它们实际上在Kernel
上实际定义,默认情况下包含在每个对象中。
当没有定义其他上下文时,内核也存在。由于Class继承自其上定义的内核方法,因此也在类范围的范围内。
答案 1 :(得分:1)
只是为了确认Jakub Hampl说的话:
def foo
"Debugging: self is #{self.inspect}"
end
foo # => "Debugging: self is main"
class Bar
def goo
foo
end
end
Bar.new.goo # => "Debugging: self is #<Bar:0x1513cc0>"
答案 2 :(得分:0)
您应该将其定义为类方法(self
)而不是实例方法
class Bar
def self.foo
"foo"
end
foo
#=> "foo"
end