面试题答案
一键面试在这种情况下,选择使用Proc或Lambda更为合适,因为它们提供了更灵活的参数处理方式,相比于块,它们可以作为独立的对象进行传递和存储。
选择原因
- 块:块不是独立的对象,不能像Proc或Lambda那样被显式地传递和存储,灵活性有限。
- Proc:Proc对象对参数的处理相对灵活,可以接受不同数量的参数,并且在调用时会根据实际传入的参数进行动态调整。
- Lambda:Lambda对象对参数的数量要求更严格,与定义时的参数列表必须严格匹配,但它的返回行为更符合常规函数的预期。
代码示例
- 使用Proc
def process_with_proc(&proc)
proc.call(1, "two", :three)
end
my_proc = Proc.new do |*args|
args.each do |arg|
puts "Processing argument: #{arg}"
end
end
process_with_proc(&my_proc)
- 使用Lambda
def process_with_lambda(&lambda)
lambda.call(1, "two", :three)
end
my_lambda = ->(a, b, c) {
puts "Arguments: #{a}, #{b}, #{c}"
}
process_with_lambda(&my_lambda)
在上述示例中,Proc可以处理不同数量和类型的参数,在块内使用*args
收集所有参数。而Lambda要求传递的参数数量与定义时一致,这里定义了三个参数,所以传递三个参数时才能正确运行。