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