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

xriantvc  于 2023-10-17  发布在  Ruby
关注(0)|答案(1)|浏览(107)

如果你用一个模块扩展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
41ik7eoe

41ik7eoe1#

这是可行的,不需要用户定义的全局var:

class My
  def meth
    puts "instance"
    TOPLEVEL_BINDING.receiver.meth
  end
end

另一种TOPLEVEL_BINDING.eval('meth')也可以直接调用meth,但对于非平凡方法,通过receiver方法返回的“main”对象的句柄可能更方便。
顺便说一句,this blog post值得阅读,以帮助理解为什么在处理Ruby顶级时,有些东西可以工作,而有些则不行。

相关问题