我使用Ruby创建一些简单的项目,我遵循RubyGems项目结构。在我的代码库中,我有两个不同的"命名空间":
的类lib
u
x
class_a.rb
m
p
class_b.rb
我正在为这个类使用嵌套模块,因此ClassA位于模块U中,位于模块U中。
虽然在ClassA
内需要ClassB
,但我可以通过U::X::ClassA
引用它来使用它。我想知道是否有任何模式可以让我只输入ClassA
,而没有完整的命名空间。
答案 0 :(得分:1)
您可以执行类似
的操作module M::P
ClassA = U::X::ClassA
end
将ClassA
定义为P
内的常量。这不是一个好习惯,但你可以做到。
IMO,只需使用U::X::ClassA
。
答案 1 :(得分:0)
提前两条评论:
那就是说,你可以建立一个像这样的最小例子:
module U
module X
class Class_a
end
end
end
module M
module P
class Class_b
include U::X
def initialize
a = U::X::Class_a.new ##you want replace this with:
#a= Class_a.new
end
end
end
end
M::P::Class_b.new
带有Class_a = U::X::Class_a
的Fedes solution看起来像:
module U
module X
class Class_a
end
end
end
module M
module P
Class_a = U::X::Class_a ##<- define here the local version
class Class_b
def initialize
a= Class_a.new
end
end
end
end
M::P::Class_b.new
另一种可能性是包含包含类的模块:
module U
module X
class Class_a
end
end
end
module M
module P
class Class_b
include U::X #<- Include the module
def initialize
a= Class_a.new
end
end
end
end
M::P::Class_b.new
注意:此解决方案将包含模块U::X
的所有类和常量。这可能是您需要的解决方案,但也可能是您的目的。