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

时间:2011-06-01 21:56:19

标签: 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见How do I refer to a submodule's "full path" in ruby?

1 个答案:

答案 0 :(得分:5)

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

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

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

解决此问题的一种方法:

module Other
  class User
    include ::User::Foo
  end
end