【发布时间】:2016-10-14 19:11:24
【问题描述】:
我有一个模块,其中包含名为 String 的类(以及其他类)。如果没有这样的类,我需要按名称查找类并优雅地退回。
module Mod1
module String
end
end
Mod1.const_get 'String'
#⇒ Mod1::String
Kernel.const_get '::Mod1::String'
#⇒ Mod1::String
到目前为止,一切都很好。当我尝试查找不存在的类时,我预计会收到NameError,这很好。问题是如果有一个具有给定名称的类存在于全局命名空间中,它会被返回:
Mod1.const_get 'Fixnum'
#⇒ Fixnum < Integer
Kernel.const_get '::Mod1::Fixnum'
#⇒ Fixnum < Integer
我明白原因,但我的问题是:是否有一种开箱即用的方法可以仅在给定的命名空间中查找常量?
现在我检查结果
result.to_s.start_with?(namespace)
但这绝对不是缩小查找范围的最佳方式。
【问题讨论】:
标签: ruby namespaces metaprogramming