Ruby Users' Guide - 特異メソッド

前 - コピー - 次 - 目次

### 特異メソッド

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

前 - コピー - 次 - 目次