[ruby-list:194] TUTORIAL - singleton method

From: matz@... (Yukihiro Matsumoto)
Date: 1996-02-26 01:15:10 UTC
List: ruby-list #194
まつもと ゆきひろ@トヨタケーラムです.

singleton methodってのは文中にある「特異メソッド」のことです.
それってなに? っていう話は読んでみてください.
--
特異メソッド

インスタンスの挙動はそのクラスが決めているのだが,ある特定の
インスタンスだけがもつ振舞いというのもありえる.通常ならその
インスタンスのためだけにサブクラスを作ったりするのだが,ruby
なら,そんなことをしなくても,ある特定のインスタンスにだけメ
ソッドを追加することができる.

 ruby> class SingletonTest
 ruby|   def size
 ruby|     print "25\n"
 ruby|   end
 ruby| end
 SingletonTest
 ruby> test1 = SingletonTest.new
 #<SingletonTest:0xbc468>
 ruby> test2 = SingletonTest.new
 #<SingletonTest:0xbae20>
 ruby> def test2.size
 ruby|   print "10\n"
 ruby| end
 nil
 ruby> test1.size
 25
 nil
 ruby> test1.size
 25
 nil
 ruby> test2.size
 10
 nil

この例でtest1とtest2は同じクラスのインスタンスであるが,
test2ではsizeというメソッドが再定義されているので,挙動が異
なる.このような特定のインスタンスに所属するメソッドを「特異
メソッド」と呼ぶ.

特異メソッドの使われ方だが,たとえばGUIのボタンのように押さ
れた時の挙動がひとつひとつ異なる時に,ボタンを押された時に実
行されるメソッドを再定義する,などということも考えられる.

特異メソッドは別にrubyだけのオリジナルじゃない.珍しいのは確
かだけど.rubyの他に特異メソッドを持っているのはCLOSやDylan
などがある.中にはSelfやNewtonScriptのように特異メソッドしか
持たないものもある.そういう言語をプロトタイプベースという.

In This Thread

Prev Next