我想定义一个块,在块中定义了一些常量并且必须复制到新建模块中。我得到这个至今:将块常量复制到模块中
class Foo
def self.macros(&block)
mod = Module.new do
module_eval &block
end
self.const_set(:Macros, mod)
end
macros do
Point = Struct.new :x, :y
VALUE = 5
def self.bar
"bar"
end
def foo
"foo"
end
end
end
有了上面的代码,我设法Foo::Macros.bar
但常量失踪。
如何获得块内定义的常量?
我想通过嵌入在类内的新模块来访问它们,就像Foo::Macros::Point
作为一个说明,常数通常是'ALL_CAPS'地方类和模块是'MixedCase'。 – tadman 2015-01-26 18:48:57
刚更新了这个例子。还注意到无法在模块内部初始化Struct或Classes。似乎在模块中评估的唯一东西是函数定义 – SystematicFrank 2015-01-26 18:57:40
您可能在使用此方法时遇到问题,因此声明块内的常量非常不规则。我倾向于用'const_set'更具体地阐明它,或者找到一种不涉及使用常量的方法,而是声明方法。 – tadman 2015-01-26 19:12:05