self.name返回错误? Ruby1.9

时间:2012-03-18 02:36:33

标签: ruby ruby-1.9

我希望能够从当前调用的方法中识别方法的名称。我尝试过以下方法:

#!/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>'

如何调用我正在呼叫的方法?

2 个答案:

答案 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方法获取方法的字符串表示。