Pythonでは、「as」を使用してモジュールのエイリアスを設定できます。
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"
マイケルの答えはあなたの質問を解決するようです.
私はあなたの質問を次のように理解しました:「同じ名前の 2 つのモジュールを要求したい場合はどうすればよいですか?」つまり、両方を要求すると名前空間の衝突が発生する場合、どうすればエイリアスを作成できますか? なぜなら、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
これを 3 番目のファイルで行うとしたら、次のようになります。
require_relative 'a'
require_relative 'b'
A.greet # => other A
最初の A は、b.rb の A によって完全にオーバーライドされます。Michael のトリックを使用しても役に立ちません。
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
機能しないのでしょうか?