【发布时间】:2011-09-06 16:07:03
【问题描述】:
我正在用 Ruby 进行一些元编程,我需要在模块内动态生成同级类。这样做时,我想在模块上调用 const_set,但直到运行时我才知道要调用哪个模块常量。一个例子:
给定的类
Foo::Bar::Baz
Foo::Quox::Quack
我希望能够调用这样的函数(此处过于简化):
def generate_from klass
mod = klass.enclosing_module # <- THIS LINE is the one I need to figure out
mod.const_set("GeneratedClassName", Class.new)
end
当我使用Baz 调用时,我想得到一个新类,定义为
Foo::Bar::GeneratedClassName
还有一个嘎嘎,我想要
Foo::Quox::GeneratedClassName
我知道的唯一方法是拆分 klass.name,然后在这些字符串上反复调用 const_get,并进行常量化。有谁知道更优雅的方式?
【问题讨论】:
-
我知道的唯一两种方法是您在底部描述的方式,并且在每个类中都包含一个
get_module函数。但是,感觉应该有办法做到这一点。关注这个...
标签: ruby metaprogramming