どうも、記憶力皆無の @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
は予約語ではないんですね。
ではまた!