From: Kazuhiro Yoshida Date: 2002-04-04T15:49:27+09:00 Subject: [ruby-list:34787] Re: 用語集 super の問題 もりきゅうです。 "Tatsuaki Nagai" wrote: > def foo(a) > print a > end > > class Foo > def self.foo(a) > a=25 > super > end > end > > foo = Foo.new > foo(5) # 5 これは実質的に def foo(a) print a end foo(5) # 5 と同じですよね? bar = Foo.new bar(5) # NameError ですし。 > 後ろのfooが単なる再定義になってしまわないように メソッド呼び出し http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=%A5%E1%A5%BD%A5%C3%A5%C9%B8%C6%BD%D0%A4%B7#super で : superは現在のメソッドがオーバーライドしているメソッドを呼び出します。 : 括弧と引数が省略された場合には現在のメソッドの引数がそのまま引き渡されます。 このように書かれている通り、ここでは再定義することに意味があります。 あえて継承を使えば class Foo def foo(a) print a end end class Bar < Foo def foo(a) a=25 super end end bar = Bar.new bar.foo(5) # 25 やっぱりおかしい。 ---- YOSHIDA Kazuhiro moriq@moriq.com http://www.moriq.com/