Ruby中同名的模块和类
例如,我有模块“A”和模块“B”。在模块B中,有一个名为'a'的类,就像模块a'一样。在这个类中,我想引用A:ClassC,其中“A”是模块,但我得到了错误,因为它认为我引用的是没有ClassC的类A。我能绕开这个吗?或者我需要重新命名一个?(我希望尽可能避免这种情况) 编辑: 下面是我当前实现的一个示例,不可供参考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
>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
。一定还有别的事情你没有告诉我们。没有这一点,就不可能找出可能出现的问题。正如我在前面的评论中所说,从您的描述来看,这两个常量似乎位于不同的名称空间中,所以应该没有问题。