1

我了解 block 、 proc 和 lambda experession 的工作原理,但我不明白何时在代码中使用匿名方法。

Anonymous 解决了什么问题?

4

2 回答 2

2

lambda 的一种非常常见的用法是延迟加载(并将参数传递给)范围内的 ActiveRecord 关系:

class Post < ActiveRecord::Base
  scope :recent, lambda { |today| where('published_at >= ?', today) }
end

(从这里

但总的来说,这些闭包方法是一种简洁的方式,可以同时操作(例如)一组数据,或者将代码存储为要传递给其他函数的数据。

于 2012-05-06T19:30:31.957 回答
1

我在 Ruby 中以这种方式使用 lambda 的原因之一是当我需要一个闭包来捕获周围范围内的内容时,例如在较小的脚本中,我有时会发现这比将内容作为参数传递更方便。其他人(ab)为此使用顶级实例变量,但我不太喜欢。

根据要求更新:这是一个小例子:

shift_timestamp = -> ts do
  t = Time.parse(ts.gsub(',','.')) + options[:time]
  "#{t.strftime("%H:%M:%S")},#{t.usec.to_s[0..2]}"
end

这是我为转换字幕而写的一个小工具。这是一个简短的脚本,以这种方式编写它使我可以关闭options并在 lambda 中访问它,而无需将其传递进去。正如我所说,没有什么时髦的,但对于小脚本,我有时喜欢这样做(“this”是解析选项,编写 1 或 2 个使用这些选项的 lambda,稍后使用 lambda 而不是方法)。

于 2012-05-06T19:22:24.400 回答