推荐答案
在 Ruby 中,Proc 和 Lambda 都是匿名函数,但它们有一些关键的区别:
参数检查:
Lambda会对参数进行严格检查,如果传递的参数数量不匹配,会抛出ArgumentError。Proc不会对参数进行严格检查,如果传递的参数数量不匹配,会自动调整参数数量。
返回值:
Lambda的返回值类似于普通方法,会从Lambda中返回并继续执行后续代码。Proc的返回值会直接从包含它的方法中返回,类似于return语句。
return行为:- 在
Lambda中,return只会从Lambda本身返回。 - 在
Proc中,return会从包含Proc的方法中返回。
- 在
本题详细解读
1. 参数检查
lambda_example = lambda { |x, y| x + y }
proc_example = Proc.new { |x, y| x + y }
# Lambda 会抛出 ArgumentError
lambda_example.call(1) # => ArgumentError: wrong number of arguments (given 1, expected 2)
# Proc 不会抛出错误,未提供的参数会被设置为 nil
proc_example.call(1) # => TypeError: nil can't be coerced into Integer2. 返回值
// www.javascriptcn.com code example
def lambda_return
lambda { return "lambda return" }.call
"method return"
end
def proc_return
Proc.new { return "proc return" }.call
"method return"
end
lambda_return # => "method return"
proc_return # => "proc return"3. return 行为
// www.javascriptcn.com code example
def lambda_return_behavior
lambda { return "from lambda" }.call
"from method"
end
def proc_return_behavior
Proc.new { return "from proc" }.call
"from method"
end
lambda_return_behavior # => "from method"
proc_return_behavior # => "from proc"通过这些例子,可以清楚地看到 Proc 和 Lambda 在参数检查、返回值和 return 行为上的区别。