【问题标题】:self.name returns error? Ruby1.9self.name 返回错误? Ruby1.9
【发布时间】:2012-04-03 01:48:07
【问题描述】:

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

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

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

【问题讨论】:

标签: ruby ruby-1.9


【解决方案1】:
class SomeClass
  def initialize
    puts __callee__
  end
end
p = SomeClass.new #=> initialize

__method____callee__ 是同义词

【讨论】:

  • 这里是__callee__/__method__ 的文档供参考。 (编辑:所以弄乱了 URL,所以这里很简单:http://ruby-doc.org/core-1.9.3/Kernel.html#method-i-__callee__
【解决方案2】:

在 Ruby 中,方法不是程序员可以像在字符串和数组上那样操作它们的常规对象。因此,虽然Method 类有name() 方法,但当您调用name() 方法时,它会在SomeClass 及其祖先[Object, Kernel, BasicObject] 中搜索

您可以通过在SomeClass 中的任何方法定义中检查self 来查看这一点。它将返回 SomeClass 作为自己。

因此,您会得到undefined method 异常。您可以使用__method__ 获取当前方法名称。

class SomeClass
  def initialize
    puts __method__
  end
end

__method__ 返回符号。可以使用to_s方法获取方法的字符串表示形式。

【讨论】:

  • Method.name 是一种方法吗?为什么从方法调用 self.name 不返回方法的名称?
  • @KurtRudolph 因为self 不是方法,而是类的实例。
猜你喜欢
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2015-06-19
  • 2019-09-23
相关资源
最近更新 更多