您如何称呼->
运算符,如下所示?
->(...) do
...
end
以下代码段是否相同?
succ = ->(x) {x + 1}
succ = lambda {|x| x + 1}
答案 0 :(得分:210)
在 Ruby Programming Language (“Methods,Procs,Lambdas and Closures”)中,使用->
定义的lambda称为 lambda literal 。
succ = ->(x){ x+1 }
succ.call(2)
代码等同于以下代码。
succ = lambda { |x| x + 1 }
succ.call(2)
非正式地,我听说它被称为 stabby lambda 或 stabby literal 。
答案 1 :(得分:120)
=>
== 哈希火箭 将键与哈希映射文字中的值分开。
->
== Dash Rocket 用于在Ruby 1.9.X(不带args)和Ruby 2.X(带args)中定义lambda文字。您提供的示例(->(x) { x * 2 }
& lambda { |x| x * 2 }
)实际上是等效的。
答案 2 :(得分:3)
Lambda火箭
我从这篇文章中得到了这个。 但首先谷歌搜索 红宝石lambda速记 http://ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-ruby-1-dot-9-and-2-dot-0/
答案 3 :(得分:1)
->(x) { ... }
与lambda { |x| ... }
相同。它创建一个lambda。请参见Kernel#lambda lambda是proc的一种类型,可确保传递给它的参数数量正确。另请参见Proc::new和Kernel#proc。