在Python中,你可以设置一个别名以“为”模块:
import mymodule as mm
但我似乎无法找到红宝石等同。 我知道,你可以include
,而不是require
的模块,但这种风险命名空间冲突。 是否有任何等同于Python模块别名?
在Python中,你可以设置一个别名以“为”模块:
import mymodule as mm
但我似乎无法找到红宝石等同。 我知道,你可以include
,而不是require
的模块,但这种风险命名空间冲突。 是否有任何等同于Python模块别名?
在Ruby中模块是不是真的那么特别,所以你可以将它们分配给另一个常数:
[4] (pry) main: 0> module TestModule
[4] (pry) main: 0* def self.foo
[4] (pry) main: 0* "test"
[4] (pry) main: 0* end
[4] (pry) main: 0* end
=> nil
[5] (pry) main: 0> tm = TestModule
=> TestModule
[6] (pry) main: 0> tm.foo
=> "test"
迈克尔的答案似乎解决你的问题......不过,我看这个问题有点不同,并发现了一些非常好的,我认为值得分享。
我明白你的问题:“我该怎么办,如果我想需要两个同名的模块”,那就是,我怎么可能别名他们,如果需要同时将导致命名空间冲突? 因为,据我的Python的理解“进口......为......”云,这也解决了这些类型的问题。 在Ruby中的一个例子:
#file a.rb
module A
def self.greet
puts 'A'
end
end
#file b.rb
module A
def self.greet
puts 'other A'
end
end
现在,如果我想在第三个文件做到这一点:
require_relative 'a'
require_relative 'b'
A.greet # => other A
第一A将由在b.rb.在A被完全覆盖 利用迈克尔的伎俩也不会帮助:
require_relative 'a'
TMP_A = A
A.greet # => A
TMP_A.greet # => A
require_relative 'b'
TMP_A2 = A
A.greet # => other A
TMP_A2.greet # => other A
TMP_A.greet # => other A :(
太糟糕了。 然后我想,好吧,在Ruby中还有无处不在dup
制作基本上所有的事,没有太多的希望我刚才输入这一点,并重新运行该程序的克隆:
require_relative 'a'
TMP_A = A.dup
A.greet # => A
TMP_A.greet # => A
require_relative 'b'
TMP_A2 = A
A.greet # => other A
TMP_A2.greet # => other A
TMP_A.greet # => A :P
这完全让我很快乐,希望你们欣赏它尽可能多的为好。 现在我想想,这是有道理的-模块是像任何其他的对象毕竟,为什么不应该dup
工作?