9

我刚刚在 Rails 应用程序中遇到了以下代码行:

scope :for_uid, ->(external_id) { where(external_id: external_id) }

运营商是什么->意思?谷歌有点难。

4

3 回答 3

16

这是语法糖。

->(external_id) { where(external_id: external_id) }

等于:

lambda { |external_id| where(external_id: external_id) }
于 2013-07-15T14:20:43.240 回答
7

这是新的 lambda 表示法。这种语法是在 ruby​​ 1.9 中引入的,用于定义未命名的函数。

在您的示例中,它是由未命名函数定义的范围。

于 2013-07-15T14:21:47.683 回答
5

->运算符是在 Ruby 1.9 中作为旧lambda函数的简写语法引入的。它的行为与lambda函数几乎相同,但允许您在块外指定参数:

lambda {|param| puts param }

# becomes

-> (param) { puts params }
于 2013-07-15T14:22:03.110 回答