[#4754] Now,I am starting ruby. — mamoru@... (Mamoru Matushita)

先日、初めて投稿したつもりだったのですが間違えて

14 messages 1997/10/02

[#4891] mixin - singleton method inheritance, const etc... — shugo@... (Shugo Maeda)

前田です。

13 messages 1997/10/10

[#5000] ruby 1.0-971015 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

14 messages 1997/10/15

[#5056] RubyでOODB — hisanori@...

松尾です。

20 messages 1997/10/20
[#5057] Re: RubyでOODB — matz@... (Yukihiro Matsumoto) 1997/10/20

まつもと ゆきひろです

[#5065] Re: RubyでOODB — hisanori@... 1997/10/20

松尾です。

[#5066] Re: RubyでOODB — matz@... (Yukihiro Matsumoto) 1997/10/20

まつもと ゆきひろです

[ruby-list:5151] Re: class method, instance method

From: shugo@... (Shugo Maeda)
Date: 1997-10-28 16:33:01 UTC
List: ruby-list #5151
前田です。

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って色々な言語の特長を吸収しているので,「○○に似ている」
の○○には大抵の言語が当て嵌るようでいて,その実どれも当て嵌ら
ないような気がします。

-- 
前田 修吾

In This Thread