Quantcast
Channel: ruby - Madogiwa Blog
Viewing all articles
Browse latest Browse all 42

Ruby: `define_method`でキーワード引数を持つメソッドを定義するメモ📝

$
0
0

Rubydefine_methodを使うと外部からレシーバーに任意のメソッドを定義できますが、キーワード引数を持つメソッドを定義するときにやり方を迷ったのでメモ📝

docs.ruby-lang.org

define_methodは以下のようにblockを渡してメソッドを定義できますが、block引数ではキーワード引数を定義できませんが、

classFoodeffoo; endendFoo.define_method(:bar) do |prefix|
  puts "#{prefix} bar!"endFoo.new.bar("Hello")
#=> Hello bar!

define_methodには、以下の通りProcオブジェクトを渡すことができるので、

[PARAM] method: Proc、Method あるいは UnboundMethod のいずれかのインスタンスを指定します。 Module#define_method (Ruby 3.3 リファレンスマニュアル)

以下のようにキーワード引数を持つlamdaやprocのオブジェクトを渡すことでキーワード引数を持つメソッドをdefine_methodで定義することが出来ます✨

classFoodeffoo; endendFoo.define_method(:bar, ->(prefix:) { puts "#{prefix} bar!" })
Foo.new.bar(prefix: "Hello")
#=> Hello bar!

Rubyは色々method定義できたりして便利ですね!


Viewing all articles
Browse latest Browse all 42

Trending Articles