Ruby 中同名的模块和 Class
Module and Class with the same name in Ruby
比如说,我有 模块 'A' 和 模块 'B'。在模块B中,有一个class叫做'A',就像模块[=41] =]。在这个 class 中,我想引用 A::ClassC,其中 'A' 是模块,但我收到错误因为它认为我引用的是 class A,它没有 ClassC。我可以解决这个问题吗?或者我需要重命名一个吗? (我想尽可能避免这种情况)
编辑:
这里是我当前实现的一个例子,但不能供参考。
>moduleA
>classC.rb
>moduleB
>classA.rb
>classB.rb
classA.rb:
module B
class A < classB
do something with A::ClassC
end
end
错误是uninitialized constant ModuleB::ClassA::ClassC
使用范围解析运算符 ::
来决定可以从哪个范围找到 class 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'。在模块B中,有一个class叫做'A',就像模块[=41] =]。在这个 class 中,我想引用 A::ClassC,其中 'A' 是模块,但我收到错误因为它认为我引用的是 class A,它没有 ClassC。我可以解决这个问题吗?或者我需要重命名一个吗? (我想尽可能避免这种情况)
编辑:
这里是我当前实现的一个例子,但不能供参考。
>moduleA
>classC.rb
>moduleB
>classA.rb
>classB.rb
classA.rb:
module B
class A < classB
do something with A::ClassC
end
end
错误是uninitialized constant ModuleB::ClassA::ClassC
使用范围解析运算符 ::
来决定可以从哪个范围找到 class 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"