山溜穿石

覚書

irb上でprivateメソッドを呼び出したい

irb上で簡単なメソッドを実行しようとして困ったのでメモ。

解決策

  • instance_evalメソッドを使う
  • sendメソッドを使う

ほかにも方法はあるがとりあえず2つだけ…

irb上でprivateメソッドを呼び出そうとするとNoMethodErrorが発生する

def foo
  self + 2
end
=> :foo

1.foo
=> `<main>': private method `foo' called for 1:Integer (NoMethodError)

instance_evalメソッドを使う

def foo
  self + 2
end
=> :foo

1.instance_eval{foo}
=> 3

docs.ruby-lang.org

sendメソッドを使う

def foo
  self + 2
end
=> :foo

1.send(:foo)
=> 3

docs.ruby-lang.org

📝 参考

docs.ruby-lang.org

zenn.dev

qiita.com