我刚刚在 Ruby/Rails 应用程序中看到了这个表达式:
def method(a, b = nil, &c)
c ||= ->(v) { v }
我了解第一部分,但不了解->() { ... }
语法。这是什么意思?
为简洁起见,变量名称已更改。我尝试搜索,但非字母数字字符显然是 SEO 的噩梦。
我刚刚在 Ruby/Rails 应用程序中看到了这个表达式:
def method(a, b = nil, &c)
c ||= ->(v) { v }
我了解第一部分,但不了解->() { ... }
语法。这是什么意思?
为简洁起见,变量名称已更改。我尝试搜索,但非字母数字字符显然是 SEO 的噩梦。
它是一个 lambda 字面量。将块变量放在里面()
,把正文放在里面{}
。
->(x, y){x + y}
在示例中,->(v){v}
接受一个参数v
并返回它,换句话说,它是一个标识函数。如果将块传递给method
,则将其分配给c
。c
如果不是,则默认分配身份功能。
这是一个lambda字面量,在 Ruby 1.9 中引入:
irb> l = ->(v) { v }
# => #<Proc:0x007f4acea30410@(irb):1 (lambda)>
irb> l.call(1)
# => 1
相当于写:
irb> l = lambda { |v| v }
# => #<Proc:0x00000001daf538@(irb):1 (lambda)>
在您发布的示例中,它用于在未指定方法时为方法提供默认块,请考虑:
def method(a, &c)
c ||= ->(v) { v }
c.call(a)
end
method(1)
# => 1
method(1) { |v| v * 2 }
# => 2