Rubyではインスタンスにそのインスタンスだけのメソッドを定義できる。これを特異メソッドという。次の例では、Employee クラスの二つのインスタンス foo と bar を作っているが、foo のメソッドは特異メソッドでオーバーライドしている。
~$ irb --simple-prompt --noinspect >> class Employee >> def bonus >> 500 >> end >> end => >> foo = Employee.new => #<Employee:0xb7c6a360> >> bar = Employee.new => #<Employee:0xb7c66f6c> >> foo.bonus => 500 >> bar.bonus => 500 >> def foo.bonus >> 1000 >> end => >> foo.bonus => 1000 >> bar.bonus => 500 インスタンスに後からメソッドを定義できるので便利な方法だが、次の方法を使うとインスタンス変数などのクラスで定義するのと同じ機能をインスタンスに与えることができる。 次の例では、foo インスタンスに新たに @name というインスタンス変数と say というメソッドを付け加える。まるで、foo だけに新しい無名のクラスを与えたかのようだ。これを特異クラスという。 >> class << foo >> attr_accessor :name >> def say >> puts "Hello, #{@name}." >> end >> end => >> foo.name = "Dolly" => Dolly >> foo.say Hello, Dolly. また、次のようにインスタンスに self を指定すると、クラスメソッドを簡潔に定義できる。よくわからないのだが、クラスもオブジェクトなのでこういうことができるらしい。それにしても、誰がこんなことを考えつくのだろう。 >> class Foo >> class << self >> def hi >> puts "Hi" >> end >> ?> def bye >> puts "Good-bye" >> end >> end >> end => >> Foo.hi Hi => >> Foo.bye Good-bye
by tnomura9
| 2008-10-16 06:46
| Ruby
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||