From: rubikitch Date: 2005-11-26T18:02:17+09:00 Subject: [ruby-list:41597] Re: 名前空間の衝突を回避する方法 From: Kentaro KAWAMOTO Subject: [ruby-list:41596] 名前空間の衝突を回避する方法 Date: Sat, 26 Nov 2005 17:05:53 +0900 るびきちです。 > Foo という名前のクラスを作る際に > Foo という名前のモジュールを含むライブラリを使いたい場合、 > 名前空間の衝突を回避する方法はあるのでしょうか? いちおうあります。 module Foo end とした時点で定数 Foo に "Foo" という名前のModule オブジェクトが代入さ れます。また、別な定数にModuleオブジェクトを代入することでaliasされま す。 module Foo def foo 1 end end Bar = Foo # Barという別名を作成 class Object remove_const :Foo # Fooという定数を削除 end class Foo include Bar # (元)Fooモジュール end p Foo.new.foo # => 1 > --- > require 'Foo/bar' > class Foo > ... > end > --- > という状況です。 Foo/bar.rbの内容が書いていないのでなんとも…。 また、名前空間の衝突を回避する目的で一連のクラス・モジュールをモジュー ルでくるんでしまう方法がよく用いられます。こっちの方が現実的だと思いま す。 module Foo def foo 1 end end module App class Foo include ::Foo # トップレベルのFoo end end p App::Foo.new.foo るびきち☆ http://www.rubyist.net/~rubikitch/