具有以下模塊內部模塊:定義模塊
module Foo
end
我們怎樣才能添加此Foo
模塊內的另一個模塊從它的名字(有例如:name = 'Bar'
)?
我想動態獲取這樣的:
module Foo
module Bar
end
end
具有以下模塊內部模塊:定義模塊
module Foo
end
我們怎樣才能添加此Foo
模塊內的另一個模塊從它的名字(有例如:name = 'Bar'
)?
我想動態獲取這樣的:
module Foo
module Bar
end
end
沒有(醜陋的)字符串的eval:
module Foo
end
bar = Module.new
Foo.const_set(:Bar, bar)
爲什麼醜陋?它的工作:) – 2012-04-01 12:30:25
真棒,謝謝! – Doug 2012-04-01 12:32:00
是的,但是對於字符串評估,您會釋放大量信息並必須重新解釋所有內容。想象一下'name'是'「Foo Bar」'。調試一下吧。 – Reactormonk 2012-04-01 12:33:53
這是非常簡單的:
module Foo
end
name = 'Bar'
Foo.class_eval <<RUBY
module #{name}
end
RUBY
puts Foo::Bar
# >> Foo::Bar
謝謝。但'class_eval'是殘酷的。我寧願用簡單的元編程方法來完成它,而不是用一些字符串來表達一些Ruby代碼。 – Doug 2012-04-01 12:30:23
字符串評估儘可能簡單。 :) – 2012-04-01 12:32:23
你只寫它:
# In some part of your codebase:
module Foo
end
# Extension:
module Foo
module Bar
end
end
我想這是關於不讀最重要的詞,'動態',這意味着部分信息,如內部模塊的名稱,是在一個變量中給出的。 – Reactormonk 2012-04-01 22:39:45
沒錯,謝謝塔斯! – TuteC 2012-04-02 15:53:53
你是什麼意思,「動態添加」? – 2012-04-01 12:21:36
面試問題嗎? – 2012-04-01 12:22:10
yup @ sergio-tulentsev,只需在模塊中添加一個模塊即可。 – Doug 2012-04-01 12:25:59