rubyの各メソッドの違い

2022.07.02

instance_evalclass_evalの記事を書いていてメモしたくなったのでメモする。

クラスメソッド

クラス自身が使えるメソッド。代表的にはnewとかcreateとか。

クラスメソッドはselfで定義する。

class Hoge
 def self.a
  # 処理
 end
end

Hoge.a

インスタンスメソッド

インスタンスに対して使えるメソッド。インスタンスとはクラスから生成したオブジェクトのこと。

インスタンスメソッドを定義したクラスでインスタンス毎に対して使用できる。

class Hoge
 def a
  # 処理
 end
end

hoge = Hoge.new
hoge.a

特異メソッド

特定のインスタンス(オブジェクト)に対してのみ使用できるメソッド。

class Hoge
end

h = Hoge.new
h_fail = Hoge.new
def h.a
 p "ハロ"
end

h.a
"ハロ"

# 呼び出せない
h_fail.a
undefined method `a' for #<Hoge:0x> (NoMethodError)

まとめ

  • クラスメソッド・・クラス自体が使える
  • インスタンスメソッド・・インスタンスが使える
  • 特異メソッド・・特定のインスタンスのみ使える