Ruby中同名的模块和类

Ruby中同名的模块和类,ruby,class,ruby-on-rails-3,module,namespaces,Ruby,Class,Ruby On Rails 3,Module,Namespaces,例如,我有模块“A”和模块“B”。在模块B中,有一个名为'a'的类,就像模块a'一样。在这个类中,我想引用A:ClassC,其中“A”是模块,但我得到了错误,因为它认为我引用的是没有ClassC的类A。我能绕开这个吗?或者我需要重新命名一个?(我希望尽可能避免这种情况) 编辑: 下面是我当前实现的一个示例,不可供参考 >moduleA >classC.rb >moduleB >classA.rb >cl

例如,我有模块“A”模块“B”。在模块B中,有一个名为'a'的类,就像模块a'一样。在这个类中,我想引用A:ClassC,其中“A”是模块,但我得到了错误,因为它认为我引用的是没有ClassC的类A。我能绕开这个吗?或者我需要重新命名一个?(我希望尽可能避免这种情况)

编辑:

下面是我当前实现的一个示例,不可供参考

    >moduleA
        >classC.rb
    >moduleB
        >classA.rb
        >classB.rb
classA.rb:

module B
    class A < classB

    do something with A::ClassC

    end
end
模块B
A类

错误是未初始化的常量模块B::ClassA::ClassC

使用作用域解析运算符
确定可以从哪个作用域类
C
中找到。
在您的情况下,您需要一个“main”作用域,因此使用
操作符作为前缀-
::a::C

module A
  class C
    def name
      "I am class C from module A"
    end
  end
end

module B
  class A
    def test
      ::A::C.new.name
    end
  end
end

name = B::A.new.test
# => "I am class C from module A"

“我有错误”-这些错误会告诉你什么是错误的,错误发生在哪里,以及你是如何做到的。没有这些错误,就不可能知道发生了什么。请构造一个。请注意,这三个词都很重要:它应该只是一个示例,不应该发布实际的代码,而应该创建一个简单的示例来演示问题。它应该是最小的,即不包含任何不需要证明问题的内容。它应该是可复制的,因此如果我复制并粘贴并运行代码,我会看到与您看到的相同的问题。从您的描述中,听起来这两个常量在不同的名称空间中,因此应该没有问题,也没有错误,但是如果没有错误和代码,就无法判断可能发生了什么。“我有模块A和模块B…”–只需显示代码而不是描述它。@JörgWMittag是的,对不起。错误是
未初始化常量模块b::ClassA::ClassC
。谢谢。这个错误不可能来自你发布的代码。代码中没有
ModuleB
,代码中没有
ClassA
。一定还有别的事情你没有告诉我们。没有这一点,就不可能找出可能出现的问题。正如我在前面的评论中所说,从您的描述来看,这两个常量似乎位于不同的名称空间中,所以应该没有问题。