Lambda 的 return 是從 Lambda return
Proc 則是從定義 Proc 的 scope return
def proc1
proc1 = Proc.new { return "小花" }
proc1.call
return "小草"
end
def lambda1
lambda1 = lambda { return "小花" }
lambda1.call
return "小草"
end
puts proc1 # 小花
puts lambda1 # 小草
Proc 針對參數的數量不會進行檢查,不足補 nil ,過多會自動丟掉;Lambda 會要求參數數量正確才會執行,較嚴謹,否則會顯示 ArgumentError 錯誤訊息。
say_hello_to = Proc.new { |name1,name2| puts "hi #{name1} #{name2}" }
say_hello_to.call("小花") #hi 小花
say_hello_to = lambda { |name1,name2| puts "hi #{name1} #{name2}" }
say_hello_to.call("小花") #wrong number of arguments (given 1, expected 2) (ArgumentError)
Ruby
Proc
lambda