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