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
                        
                        
                    