ruby - 从 Ruby 中的方法中检索方法实例

标签 ruby reflection

这是 How to determine the class a method was defined in? 的后续问题(希望您不介意相似性)

给定一个类层次结构,一个方法可以检索它自己的 Method 实例吗?

class A
  def foo
    puts "A#foo: `I am #{method(__method__)}'"
  end
end

class B < A
  def foo
    puts "B#foo: `I am #{method(__method__)}'"
    super
  end
end

A.new.foo
# A#foo: `I am #<Method: A#foo>'

B.new.foo
# B#foo: `I am #<Method: B#foo>'
# A#foo: `I am #<Method: B#foo>' # <- A#foo retrieves B#foo

这样 B.new.foo 就会打印

# B#foo: `I am #<Method: B#foo>'
# A#foo: `I am #<Method: A#foo>' # <- this is what I want

在上一个问题中,Jörg W Mittag suspected检索定义方法的类可能违反面向对象的范例。这也适用于此吗?

方法不应该“了解自己”吗?

最佳答案

我找到了一个 method正是这样做的。

class A
  def foo
    puts "A#foo: `I am #{method(__method__).super_method || method(__method__)}'"
  end
end

我真的很佩服 Matz 和 Ruby 核心开发人员。这种方法的存在意味着他们已经想到了这种情况,并且已经考虑了如何处理它。

关于ruby - 从 Ruby 中的方法中检索方法实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745608/

相关文章:

c - 迪尔德 : lazy symbol binding failed: Symbol not found - nm reports symbol found

ruby-on-rails - 为什么 Ruby 只在我的系统上抛出一个段错误,而且只在这个 Rails 应用程序中?

ruby-on-rails - 无法使用本地安装的 gem

ruby - 严重卡在 Ruby 数组重新排序上

ruby - HTTP url 在 selenium 测试运行时重定向为 HTTPS

VB.NET查找所有带有自定义标记的属性

.net - 在运行时设置可浏览属性的值

java - 以反射方式访问匿名类实例中的任何类型的 "closure variable"

scala - 从 Scala 宏访问代码文件和行号?

c++ - 使用 Protocol Buffers 检索带有字段描述符的父消息中的字段名称