【发布时间】:2019-02-12 14:02:24
【问题描述】:
假设我有以下结构:
module Library
class DSL
def met(str)
# load `str` here; for this case, `MyApplication::MyClass`
end
end
class Superclass
extend DSL
end
end
module MyApplication
class MySubclass < Library::Superclass
met 'MyClass'
end
class MyClass
end
end
在Library::DSL#met 中,我需要加载常量str,它以字符串的形式提供。显然,如果我只是做Object.const_get(str) 是行不通的。
我需要以某种方式在当前范围 (MyApplication::MySubclass) 的上下文中完全解析 str;因此str 将被解析为MyApplication::MyClass。我需要完全解决这个问题,因为稍后我需要在这个命名空间之外使用这个常量。
【问题讨论】:
-
我猜
A.const_get('C')太具体了? -
确实如此。这只是一个简化的例子,我所追求的不断加载是在库级别,所以它不知道
A。基本上,它需要在当前范围内解析C,然后加载它(即:看到C实际上是A::C,然后加载它)。 -
所以你想像 Ruby 解析文字
C那样动态解析常量,即它应该考虑嵌套和继承? -
我已更新我的问题以更好地反映我的问题的性质。 @Stefan
-
为什么不传递常量(即类)而不是其名称?