是否可以将一个块传递给一个方法,并确保该块本身没有绑定,以便它只能在另一个实例的上下文中执行(使用{class/module/instance}_eval
)而不是简单地发送:call
?
这是一个激励的例子
module M
class File
end
end
M.module_eval "File" # => M::File
M.module_eval do File end # => File
我希望上面的最后一行返回M::File
类而不是::File
.
要记住的另一件事是,在我的具体应用程序中,模块M
是动态创建的(在方法调用中),而不是静态创建的(在 Ruby 文件中,如上所示)。这就是它的实际工作方式:
def create_module(name, &block)
mod = Module.new
Object.send :const_set name, mod
mod.module_eval &block
end
create_module :M do
file_cls = Class.new
M.send :const_set, :File, file_cls
File # => ::File (and I would like M::File)
end
谢谢。