MST
星途 面试题库

面试题:Ruby块、Proc和Lambda在实际场景中的应用选择

假设你正在开发一个Ruby应用,需要实现一个可复用的函数,该函数接受不同数量和类型的参数,并根据不同的业务逻辑进行处理。在这种情况下,你会选择使用块、Proc还是Lambda?请说明原因,并给出相应的代码示例。
40.8万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

在这种情况下,选择使用Proc或Lambda更为合适,因为它们提供了更灵活的参数处理方式,相比于块,它们可以作为独立的对象进行传递和存储。

选择原因

  1. :块不是独立的对象,不能像Proc或Lambda那样被显式地传递和存储,灵活性有限。
  2. Proc:Proc对象对参数的处理相对灵活,可以接受不同数量的参数,并且在调用时会根据实际传入的参数进行动态调整。
  3. Lambda:Lambda对象对参数的数量要求更严格,与定义时的参数列表必须严格匹配,但它的返回行为更符合常规函数的预期。

代码示例

  1. 使用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)
  1. 使用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要求传递的参数数量与定义时一致,这里定义了三个参数,所以传递三个参数时才能正确运行。