[英]How do I refer to a submodule's “full path” in ruby?
在我的应用程序中,我有
VeryUniqueModule::Foo
# and…
VeryUniqueModule::Bar
Foo
和Bar
各自提供不同的服务。 我的应用程序的一部分必须动态地确定要引用的模块,它可以这样做:
def service_api
# @relevant_object.service is a string that is either 'Foo' or 'Bar'
VeryUniqueModule.const_get(@relevant_object.service)
end
稍后会详细介绍。
我刚刚更新了一个库,现在它有自己的顶级Foo
类(这是一个糟糕的设计)。 现在,当我尝试调用@relevant_object.service_api::A_CONSTANT
,我的应用程序抱怨库的 Foo
没有A_CONSTANT
。
回到上面的service_api
- 我认为const_get
正在返回类本身。 事实上,我知道它是。 如果我在irb
启动它,一切都如预期的那样 - 返回值是类本身,我可以调用类中的东西。 所以…
A_CONSTANT
返回的Class对象上service_api
,不是,我是一个字符串eval
ING或时髦的东西类似的-不应该有任何的命名空间的问题,我直接引用一个对象! service_api
以便它返回erm“完整路径”? 你可以试试这个:
VeryUniqueModule.const_get('::VeryUniqueModule::' + @relevant_object.service)
如果这不起作用,您可以尝试绕过service_api
并在需要A_CONSTANT
任何地方执行此A_CONSTANT
:
Object.const_get('::VeryUniqueModule::' + @relevant_object.service + '::A_CONSTANT')
注意::
VeryUniqueModule
之前的::
。 我不认为在这种情况下它是完全必要的,但它可能是有用的,因为它保证Ruby将在全局命名空间中寻找VeryUniqueModule
而不是在其他模块中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.