提问人:johndisk 提问时间:4/9/2020 最后编辑:johndisk 更新时间:4/28/2020 访问量:230
Ruby 中同名的模块和类
Module and Class with the same name in Ruby
问:
例如,我有模块“A”和模块“B”。在模块 B 中,有一个名为“A”的类,就像模块“A”一样。在这个类中,我想引用 A::ClassC,其中“A”是模块,但我收到错误,因为它认为我引用的是没有 ClassC 的类 A。我能解决这个问题吗?还是我需要重命名一个?(我想尽可能避免这种情况)
编辑:
这是我当前实现的一个示例,它不起作用,仅供参考。
>moduleA
>classC.rb
>moduleB
>classA.rb
>classB.rb
类A.rb:
module B
class A < classB
do something with A::ClassC
end
end
错误是uninitialized constant ModuleB::ClassA::ClassC
答:
2赞
Fabio
4/9/2020
#1
使用作用域解析运算符确定可以从哪个作用域类中找到。
在你的例子中,你想要一个“main”作用域,所以使用运算符作为前缀 -::
C
::
::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"
评论
uninitialized constant ModuleB::ClassA::ClassC
ModuleB
ClassA