From: shugo@... (Shugo Maeda) Date: 1997-10-29T01:33:01+09:00 Subject: [ruby-list:5151] Re: class method, instance method 前田です。 In message "[ruby-list:5150] Re: class method, instance method" HYOUDOU Kouichi /note wrote: |> クラスメソッドは、クラスをオブジェクトとしてみたときの |> 特異メソッドです。特異メソッドの説明で、クラスメソッド |> に触れてます。 | |rubyではクラスメソッドにあたるものを特異メソッドというのですね |いままで特異メソッドはなんだろうと思いながら |特異メソッド関連を読み飛ばしていたばちがあたりました ^^; クラスメソッドを特異メソッドという,というのはちょっと違います。 例えばsuperclassというメソッドは(overrideしていないかぎり),特異 メソッドではありません。 まず特異メソッドというのは特定のオブジェクト(インスタンス)に対 してメソッドを定義する仕組みです。 class Foo; end f = Foo.new def f.bar print "bar\n" end f.bar # => bar f2 = Foo.new; f2.barなどとするとエラーになります。 なぜならbarはfという特定のインスタンスに対して定義された特異 メソッドだからです。 rubyではクラスもClassというクラスのインスタンスなのでクラス に対して特異メソッドを定義することもできます。 def Foo.baz print "baz\n" end Foo.baz # => baz このようにクラスの特異メソッドを定義すれば,一般的な言語の クラスメソッドのように振舞うわけです。 というわけでrubyではClassで定義されたメソッドと,クラスの 特異メソッドの二つをあわせたものをクラスメソッドと呼んで います。 このあたり一見ややこしいのですが,実はとてもシンプルです。 |'ruby', perl-4.x like(?) object oriented language perlには文字列処理が強力な点以外はあんまり似てないような(^^; rubyって色々な言語の特長を吸収しているので,「○○に似ている」 の○○には大抵の言語が当て嵌るようでいて,その実どれも当て嵌ら ないような気がします。 -- 前田 修吾