在Python中,你可以設置一個別名與模塊「爲」:是否有可能在Ruby中爲模塊創建別名?
import mymodule as mm
但我似乎無法找到紅寶石等同。我知道你可以使用include
而不是require
模塊,但是這會冒着命名空間衝突的風險。有沒有任何相當於Python模塊別名?
在Python中,你可以設置一個別名與模塊「爲」:是否有可能在Ruby中爲模塊創建別名?
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"
哇,非常簡單的解決方案...謝謝你的迴應! –
@Sean,你可以將它們分配給任何變量。你應該使用本地變量,因爲它們不會污染全局範圍。另外,您不必一直使用shift鍵。 –
邁克爾的答案似乎解決你的問題......不過,我看這個問題有點不同並發現了一些我認爲值得分享的東西。
我把你的問題理解爲:「如果我想要兩個同名的模塊,我該怎麼辦?」,也就是說,如果要求兩者都會導致名稱空間衝突,我怎麼會使用它們呢?因爲,就我對Python的'import ... as ...'的理解而言,它也解決了這些問題。在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.覆蓋使用邁克爾的把戲也不會有幫助:
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
工作?
不錯,「一個模塊就像其他任何對象一樣」也是我的回答。 :-) –
@MichaelKohl Heh,真的。我喜歡它,在Ruby中有很多需要探索的東西:) – emboss
@emboss不錯,這是一個非常值得加入的主題。當我需要兩個具有相同名稱的模塊時,請記住它。 –
'require'和'include'在ruby中有很大不同。它們不能互相交換。 – x1a4