前田です。

In message "[ruby-list:5150] Re: class method, instance method"
HYOUDOU Kouichi /note <hyoudo / kcn.or.jp> 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って色々な言語の特長を吸収しているので,「○○に似ている」
の○○には大抵の言語が当て嵌るようでいて,その実どれも当て嵌ら
ないような気がします。

-- 
前田 修吾