Ruby访问符号“由......调用”
我想(高效地)获取符号,在运行时调用别名方法。 直接高效地访问某种堆栈框架对象以获得它将是幻想。
即:
Foo级
def generic_call(* args)
puts(“generic_call()通过使用#{???}”调用))
结束
别名:specific_call1:generic_call
别名:specific_call2:generic_call
结束
Foo.new.specific_call1
Foo.new.specific_call2
我想要的结果
generic_call()是通过使用specific_call1()调用的
generic_call()是通过使用specific_call2()调用的
class Foo
def generic_call()
puts "generic call was called by #{caller[0][/in `([^']+)'/, 1]}"
end
def specific_call1() generic_call end
def specific_call2() generic_call end
end
Foo.new.specific_call2 # Prints: generic call was called by specific_call2
如果您使用的别名创建然而,这将无法正常工作specific_callN
从generic_call
因为别名创建的方法实际上是原方法的一个副本-他们不实际调用原来的方法(这就是为什么你可以自由地重新定义了原不影响别名)。
获取当前方法名称的代码片段:
module Kernel
private
# Defined in ruby 1.9
unless defined?(__method__)
def __method__
caller[0] =~ /`([^']*)'/ and $1
end
end
end
没有内置的方法来做到这一点。 你可以这样破解它:
def current_method_name
caller[0].split('`').last.split(''')[0]
end
链接地址: http://www.djcxy.com/p/95425.html