特異メソッド
特定のオブジェクトにだけ紐づくメソッドのことを特異メソッド(singleton method)と呼ぶ。 例えば、以下のような事例。
nakata = "私は中田" suzuki = "私は鈴木" def nakata.show puts "これは特異メソッドです" end nakata.show => これは特異メソッドです suzuki.show => NoMethodError: undefined method `show' for "私は鈴木":String
nakata.show
のようにオブジェクト.メソッド名という形で定義している。これによって、nakataというオブジェクトにshowメソッドが追加されることになる。これにより、nakataはshowメソッドが使えるが、suzukiは使えない。
また、数値やシンボルの2つだけには、Rubyの実装上、特異メソッドを定義できない。
number = 1 def number.fire "fire" end => "TypeError: can't define singleton" symbol = :line def symbol.get "get" end => "TypeError: can't define singleton"
クラスメソッドも実は特異メソッドの一種である。特定のクラスの特異メソッドということである。以下のコードを見ると、形は確かに似てる。
class User end # クラス構文の外部でクラスメソッドの定義 def User.hello "Hello" end User.hello => "Hello"