4
在Ruby中,我可以將模塊/類嵌套到其他模塊/類中。我想要的是在文件或類中添加一些聲明,以便能夠通過短名稱引用嵌套類,例如使用Inner
得到Outer::Inner
,就像你要用Java,C#等語法可能是這樣的:如何在Ruby中將嵌套類「導入」當前類?
module Outer
class Inner; end
class AnotherInner; end
end
class C
import Outer: [:Inner, :AnotherInner]
def f
Inner
end
end
的簡單的實現可能是這樣的:
class Class
def import(constants)
@imported_constants =
(@imported_constants || {}).merge Hash[
constants.flat_map { |namespace, names|
[*names].map { |name| [name.to_sym, "#{namespace}::#{name}"] }
}]
end
def const_missing(name)
const_set name, eval(@imported_constants[name] || raise)
end
end
是否有堅實的實現在Rails或某些gem中,它可以在兼容Rails的自動加載機制的情況下進行類似的導入?
我知道這種可能性。雖然1.我不想導入所有的嵌套類。 2.在Rails的上下文中,所有的嵌套類都位於不同的文件中,通常你需要指定'Outer :: Inner',以便Rails知道從哪裏加載它。 – Alexey 2012-08-09 22:03:20