インスタンスの挙動はそのクラスが決めているのだが,ある特定の インスタンスだけがもつ振舞いというのもありえる.通常ならその インスタンスのためだけにサブクラスを作ったりするのだが,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のように特異メソッドしか 持たないものもある.そういう言語をプロトタイプベースという.