Chi*_*Kan 13 ruby metaprogramming ruby-on-rails
我正在尝试从自身获取方法名称:
def funky_method
self.inspect
end
Run Code Online (Sandbox Code Playgroud)
它返回"main".
我怎样才能返回"funky_method"?
RAM*_*RAM 22
这是代码:
对于版本> = 1.9:
def funky_method
return __callee__
end
Run Code Online (Sandbox Code Playgroud)
对于版本<1.9:
def funky_method
return __method__
end
Run Code Online (Sandbox Code Playgroud)
小智 11
__callee__
返回当前方法的"被调用名称",而__method__
返回当前方法的"定义名称".
因此,__method__
与alias_method一起使用时,不会返回预期结果.
class Foo
def foo
puts "__method__: #{__method__.to_s} __callee__:#{__callee__.to_s} "
end
alias_method :baz, :foo
end
Foo.new.foo # __method__: foo __callee__:foo
Foo.new.baz # __method__: foo __callee__:baz
Run Code Online (Sandbox Code Playgroud)