From: Nobuyoshi Nakada Date: 2011-06-06T00:42:19+09:00 Subject: [ruby-dev:43630] Re: Module#mix なかだです。 At Sat, 4 Jun 2011 03:45:32 +0900, nagachika wrote in [ruby-dev:43623]: > まず r31873 で導入された Module#mix は定数のコピーの指定が効いていないのと、 > 定数の指定が rename ありの指定しか受け付けていませんでした。 > 修正したパッチを以下に上げておきます。 > > https://github.com/nagachika/ruby/commit/fb7314e3682da41fa32a0ef0a4d8822f1b3d2ef0 たしかに定数まわりは未実装部分が残っていました。 > こちらが本題ですが Module#mix の仕様について、問題だと感じる点がありましたので > 論点に加えて頂きたいと思います。 > > mix はデフォルトでは定数をコピーしませんが、そのため内部クラスや定数に依存した > メソッドが利用できなくなってしまいます。たとえば以下のような FileUtils の例があります。 > > require "fileutils" > class C > mix FileUtils > def meth1 > touch("file") > end > end > > C.new.meth1 #=> uninitialized constant C::OPT_TABLE (NameError) > RubyKaigi2010でのスライドp56([1]24:34)では、mixされたメソッドは 元のスコープから定数を探索するという風に見えます。つまり、メソッ ドエントリーを単純にコピーしている今の実装が、仕様と違うというこ とではないかと思います。 [1] http://www.nicovideo.jp/watch/sm11914317 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦