Procとlambda式


proc, lambda式を使うことでメソッドのように処理を定義できる。

Procクラスの使い方

hello = Proc.new do |name|
  puts name
end

hello.call("ruby")

定義したProcクラスはcallで呼び出すことができます。

実行結果
ruby

labdda式の使い方

hello = lambda do |name|
  puts name
end

hello.call("ruby")

定義したlambdaはProcクラスと同様にcallで呼び出すことができます。

実行結果
ruby

Procとlambdaの違い その①

1つ目のProcとlambdaの違いは、Procは引数が足りないとnilで埋めるのに対し、lambdaはArgumentErrorを起こします。

proc = Proc.new do |a, b, c|
    puts a, b, c
end

proc.call("a", "b", "c")
実行結果
1
2
nill
proc = lambda do |a, b, c|
    puts a, b, c
end

proc.call("a", "b")
実行結果
wrong number of arguments (given 2, expected 3) (ArgumentError)

Procとlambdaの違い その②

2つ目の違いは、returnを使用した時の挙動の差です。Proc内でreturnを使用すると、ブロックを実行しているメソッドから抜けてしまいますが、lambdaはブロックを抜けてブロックを実行してるメソッドに戻ります。

def method_with_proc
  proc = Proc.new do |a|
    puts a
    return
  end
  proc.call("proc")
  puts "method_proc"
end

method_with_proc
実行結果
proc
def method_with_lambda
  proc = lambda do |a|
    puts a
    return
  end
  proc.call("lambda")
  puts "method_lambda"
end

method_with_lambda
実行結果
lambda
method_lambda

オススメの記事

Rails NOT NULL句を綺麗に書こう Ruby ハッシュ型と配列型の複合
Rails 固定出力文字列の設定 Rails マイグレーションコマンド一覧
Swift guard - else 文 BLOG 動画と教本どちらが良いのか?!
Rails Fat Model, Skinny Controllerという考え方 Rails CSVファイルのデータを読み込んで処理をする
前の記事 >> 繰り返し構文
Rubyの記事一覧へ戻る