1

如果main用模块扩展对象,是否可以引用另一个对象中的新方法?

module Mod
  def meth
    puts "top level"
  end
end

extend Mod  # --- not include

class My
  def meth
    puts "instance"
    TOP_LEVEL.meth # --- psuedo-code to explain the intention
  end
end

My.new.meth # prints "instance", then fails
4

1 回答 1

2

这有效,不需要用户定义的全局变量:

class My
  def meth
    puts "instance"
    TOPLEVEL_BINDING.eval('self').meth
  end
end

看起来更简单的TOPLEVEL_BINDING.eval('meth')方法也可以,但对于非平凡的方法,“主”对象的句柄可能更方便。


顺便说一句,这篇博文值得一读,以帮助理解为什么在处理 Ruby 顶层时有些东西有效,而另一些无效。

于 2013-08-23T08:08:35.240 回答