这是 Ruby 1.9 中的“刺猬lambda”运算符。例如,请参见2008年的此文章。 简而言之:> foo2 = ->(arg) { arg * 2 } > foo2.call "now" => nownow 请注意->和(arg)之间缺少空格,这是有意为之的。
->
和(arg)
之间不需要加空格。我刚在运行着ruby 1.9.3p484
的irb
中试过了。不确定这个空格是否在之前的版本中是必需的。或者,你是想用 "intentional" 来作为一种编码风格以增加清晰度吗? - zealoushackerfoo2 = -> arg { arg*2 }
是有效的语法。 - zealoushacker-> { #code }
语法创建了一个没有参数的方法,也可以写成->() { #code }
,看起来更像Dave的带一个参数->(arg) { #code }
的示例。尽管上下文不幸地与Ruby 1.9的哈希语法无关,但整个表达式也可以在Ruby 1.8中编写为{:default => lambda{ Time.now }}
。 - Andrew-> (x) { x }
。但是在Ruby 2.x中允许这样做。 - Kelvin