ruby认为即使我指定了完整的命名空间,我也引用了顶级常量

Joh*_*hir 6 ruby

在我的应用程序中,我有

class User
  include User::Foo
end
Run Code Online (Sandbox Code Playgroud)

User::Foo 在app/models/user/foo.rb中定义

现在我正在使用一个定义自己的Foo类的库.我收到这个错误:

警告:toplevel User :: Foo引用的常量Foo

User仅指Foo完整路径User::Foo,并且Foo从不实际引用Foo.

这是怎么回事?

更新:记得以前我遇到过同样的问题,在问题1中看到:如何在ruby中引用子模块的"完整路径"?

Dig*_*oss 5

确保所需的User :: Foo定义可见

消息说:它找到的唯一定义是在顶层.这显然是可疑的,因为你遇到了限定名称的麻烦.

没有一种好方法可以说你想要一个不同的:: User.这是一个类,ruby将在那里寻找定义,然后在顶层.您需要以某种方式指定模块而不引用您的类.

解决此问题的一种方法:

module Other
  class User
    include ::User::Foo
  end
end
Run Code Online (Sandbox Code Playgroud)