MST
星途 面试题库

面试题:Ruby 函数式编程中的高阶函数与闭包

编写一个Ruby高阶函数,该函数接收一个函数对象作为参数,返回一个新的函数。新函数将原函数应用到传入的数组的每个元素上,并将结果累加。同时,请解释闭包在这个过程中起到了什么作用。
31.0万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
def higher_order_function(func)
  lambda do |arr|
    arr.inject(0) { |sum, element| sum + func.call(element) }
  end
end

闭包在这个过程中起到了保存外部函数作用域中变量(这里是传入的 func)的作用。当 higher_order_function 返回新的函数(一个 lambda)时,这个新函数形成了闭包。它记住了在创建它时 higher_order_function 作用域中的 func,即使 higher_order_function 已经执行完毕,其作用域已经消失,新函数依然可以访问并使用 func 对数组元素进行操作。这样使得新函数具有了对 func 的持久引用,从而能够完成对数组元素应用 func 并累加结果的功能。