- コピー - - 目次

特異メソッド

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


 ruby> class SingletonTest
 ruby|   def size
 ruby|     print "25\n"
 ruby|   end
 ruby| end
 nil
 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> test2.size
 10
 nil

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

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

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


- コピー - - 目次