我想定義一個塊,在塊中定義了一些常量並且必須複製到新建模塊中。我得到這個至今:將塊常量複製到模塊中
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