0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

特異メソッドの意味がわからんって人へ

Last updated at Posted at 2019-05-12

以下「メタプログラミングRuby」で勉強したことです。

特異メソッドとは

特定のオブジェクトに対して定義されたメソッドのこと。

qiita.rb
wareki = "heisei"

def wareki.is_reiwa?
  self == "reiwa"
end

wareki.is_reiwa? #=>false

ここで定義したwareki.is_reiwa?はStringクラスの他のオブジェクトに影響を及ぼすことはない。warekiというオブジェクト(正確には"heisei")に対してのみ適用されるメソッドである。
特異とは普通と異なり特別なことだ。特異メソッドはその言葉通り、普通のメソッドとは異なり、特別に定義されたメソッドのことだ。
(英語ではsingular methodと呼称されている。singularには「個別の」という意味があるので、「個別に定義されたメソッド」と理解する方がしっくり来るかもしれない)

クラスメソッドと特異メソッドの関係

qiita.rb
class Hoge
  def self.class_method_a
    puts "class_method_a"
  end
end

Hoge.class_method_a #=> "class_method_a"

rubyを少しでも触ったことのある人なら、上のコードが何をやっているかわかるだろう。
Hogeクラスにclass_method_aクラスメソッドを定義している。
これを先の特異メソッドと見比べてみてほしい。

「なんか似てない?」

実はクラスメソッドも一種の特異メソッドなのだ。

「え?でも特異メソッドってオブジェクトに対して定義するものじゃないの?」
「クラスってオブジェクトじゃなくね?」

と思うかもしれないが、実はクラスもオブジェクトだ(ややこしい)。
もっとややこしい言い方をすると「HogeクラスはClassクラスのオブジェクト」だ。

クラスメソッド = Hogeクラス(Classクラスの「オブジェクト」)に定義されたメソッド
特異メソッド = 特定のオブジェクトに対して定義されたメソッド
クラスメソッド == 特異メソッド

以上のことからクラスメソッドも特異メソッドの一種なのだ。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?