From: GOTO Naohisa Date: 2004-01-21T01:22:59+09:00 Subject: [ruby-list:39058] undefの挙動 ngotoといいます。 Ruby 1.8.1にて以下のコードを実行すると NoMethodError になります。 % cat test.rb class A def a; 'a'; end def dummy; end end class B < A undef a, dummy def x; 'x'; end def dummy2; end end b = B.new p b.x % ruby test.rb test.rb:11: undefined method `x' for # (NoMethodError) % ruby --version ruby 1.8.1 (2003-12-25) [i686-linux] Ruby 1.6.7 ではエラーが出ず "x" を表示して正常終了します。 また、不思議なことに、 undef a, dummy を undef a だけにしたり、 クラス B の def dummy2; end の行を削除すると、エラーが出ません。 さらに、以下のようにメソッドを追加すると、 % cat test2.rb class A def a; 'a'; end def n; a; end def dummy; end end class B < A undef a, dummy def x; 'x'; end def n; 'n'; end def dummy2; end end b = B.new p b.n % ruby test2.rb test2.rb:3:in `n': undefined local variable or method `a' for # (NameError) from test2.rb:13 のように、クラス B でメソッドを上書き定義したはずなのに反映されません。 もしかすると、ここでは undef ではなくて undef_method を使うほうがよい? -- 後藤 直久 ngoto@gen-info.osaka-u.ac.jp