ruby认为即使我指定了完整的命名空间,我也引用了顶级常量
在我的应用程序中,我有
class User include User::Foo end
User::Foo
在app / models / user / foo.rb中定义
现在我正在使用一个定义自己的Foo
类的库。 我收到这个错误:
警告:toplevel User :: Foo引用的常量Foo
User
仅使用完整路径引用Foo
, User::Foo
和Foo
实际上从未引用Foo
。
这是怎么回事?
更新:记得以前我遇到过同样的问题,在问题1中看到: 如何在ruby中引用子模块的“完整路径”?
确保所需的User :: Foo定义可见
消息说:它找到的唯一定义是在顶层。 这显然是可疑的,因为你遇到了限定名称的麻烦。
没有一种好方法可以说你想要一个不同的:: User。 这是一个类,ruby将在那里寻找定义,然后在顶层。 您需要以某种方式指定模块而不引用您的类。
解决此问题的一种方法:
module Other class User include ::User::Foo end end