我正在浏览Friendly_id gem代码库,我发现line有以下任务:
@defaults ||= ->(config) {config.use :reserved}
我的问题是:
->
做了什么以及它意味着什么?感谢您的帮助
答案 0 :(得分:12)
这表示lambda
。使用此功能,您将锁定一个匿名函数,该函数接受参数 config 并使用该变量计算块。
上述表达式也可以定义为:
@defaults ||= lambda {|config| config.use :reserved}
除了返回和中断模式的差异之外, Proc
与Ruby中的lambda
类似。 Proc 可以作为保存为对象的块调用,而 lambda 是保存为对象的方法。他们找到了函数式编程的根源。
简而言之,lambda是一个命名过程,可以保存为对象,稍后可以调用。
inc = ->x{ x + 1 }
inc.call(3)
#=> 4
lambda
的一个常见而有趣的例子是Rails Scope,其中一个方法在名称范围内简单地指定为lambda,稍后可以在ActiveRecord查询时用作操作。