我希望能够从当前调用的方法中识别方法的名称。我尝试过以下方法:
#!/usr/bin/env ruby
class SomeClass
def initialize
puts self.name
end
end
p = SomeClass.new
但收到以下错误:
./test.rb:4:in `initialize': undefined method `name' <SomeClass:0x007fe4d107ba30 (NoMethodError)
from ./test.rb:7:in `new'
from ./test.rb:7:in `<main>'
如何调用我正在呼叫的方法?
答案 0 :(得分:4)
class SomeClass
def initialize
puts __callee__
end
end
p = SomeClass.new #=> initialize
__method__
和__callee__
是同义词
答案 1 :(得分:2)
在Ruby中,方法不是常规对象,程序员可以像对字符串和数组一样对它们进行操作。因此,虽然Method
类具有name()
方法,但当您调用name()
方法时,会在SomeClass
及其祖先[Object, Kernel, BasicObject]
中搜索
您可以通过查看self
中任何方法定义中的SomeClass
来查看此内容。它会将SomeClass
作为自我返回。
因此,您获得undefined method
例外。您可以使用__method__
获取当前的方法名称。
class SomeClass
def initialize
puts __method__
end
end
__method__
返回符号。您可以使用to_s
方法获取方法的字符串表示。