如果使用模块扩展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
答案 0 :(得分:2)
这很有效,无需用户定义的全局变量:
class My
def meth
puts "instance"
TOPLEVEL_BINDING.eval('self').meth
end
end
更简单的TOPLEVEL_BINDING.eval('meth')
也可以,但对于非平凡的方法,“主”对象的句柄可能更方便。
顺便说一句,this blog post值得一读,以帮助理解为什么有些东西可以工作,而其他东西则不能处理Ruby顶级。