Ruby の proc や lambda でキーワード引数を使う方法

どうも、記憶力皆無の @shutooike です。

Ruby の proc や lambda でキーワード引数(keyword arguments)を使う方法いつも忘れるので未来の自分に向けて記事にします。

proc

# キーワード引数
proc = Proc.new { |species:, name:| puts "吾輩は#{species}である。名前は#{name}" }
proc.call(species: '', name: 'ニャン太郎') #=> "吾輩は猫である。名前はニャン太郎。"

# キーワード引数(デフォルト値あり)
proc = Proc.new { |species: '猫', name: 'まだ無い'| puts "吾輩は#{species}である。名前は#{name}" }
proc.call #=> "吾輩は猫である。名前はまだ無い。"

lambda

# キーワード引数
lambda = lambda { |species:, name:| puts "吾輩は#{species}である。名前は#{name}" }
lambda.call(species: '', name: 'ニャン太郎') #=> "吾輩は猫である。名前はニャン太郎。"

# キーワード引数(デフォルト値あり)
lambda = lambda { |species: '猫', name: 'まだ無い'| puts "吾輩は#{species}である。名前は#{name}" }
lambda.call #=> "吾輩は猫である。名前はまだ無い。"

# アロー演算子でも
lambda = ->(species:, name:) { puts "吾輩は#{species}である。名前は#{name}" }
lambda = ->(species: '', name: 'まだ無い') { puts "吾輩は#{species}である。名前は#{name}" }

記事を書いて気づきましたが、lambda は予約語ではないんですね。

ではまた!