是否可以在实例方法中引用顶级“main”?

时间:2013-08-23 07:58:15

标签: ruby

如果使用模块扩展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

1 个答案:

答案 0 :(得分:2)

这很有效,无需用户定义的全局变量:

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

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


顺便说一句,this blog post值得一读,以帮助理解为什么有些东西可以工作,而其他东西则不能处理Ruby顶级。