我刚刚在一个Ruby/Rails应用程序中看到了这个表达式:
def method(a, b = nil, &c)
c ||= ->(v) { v }
我理解第一部分,但不了解
->() { ... }
语法的含义。请问它是什么意思?为简洁起见,变量名已被更改。我尝试搜索,但非字母数字字符对SEO显然是一场噩梦。
我刚刚在一个Ruby/Rails应用程序中看到了这个表达式:
def method(a, b = nil, &c)
c ||= ->(v) { v }
->() { ... }
语法的含义。请问它是什么意思?这是一个Lambda字面量。将代码块变量放在()
内部,将函数体放在{}
内部。
->(x, y){x + y}
->(v){v}
接收一个参数 v
并返回它,换句话说,它是一个恒等函数。如果将块传递给 method
,那么它将被分配给 c
。否则,默认情况下会将恒等函数分配给 c
。c
,你基本上只是传递 v
(到一个块中?)并期望它返回吗? - hohner&c
in ruby does not mean "passed by reference", it means c
is the proc (aka block) in method( 'foo' ) do; something; end
- kik那是一个在Ruby 1.9中引入的lambda文字。
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