什么是->;Ruby中的(stab)操作符?

什么是->;Ruby中的(stab)操作符?,ruby,Ruby,在以下示例中: default: -> { Time.now } 什么是->?我熟悉=>,但第一次看到->的是Ruby 1.9“Thanky lambda”操作符。例如,请参见 简而言之: > foo2 = ->(arg) { arg * 2 } > foo2.call "now" => nownow 注意->和(arg)之间缺少空格,这是故意的。实际上,我很确定->和(arg)之间的空格是不需要的。刚刚在irb运行ruby 1.9.3p484时试用过。不确定

在以下示例中:

default: -> { Time.now }
什么是
->
?我熟悉
=>
,但第一次看到
->

的是Ruby 1.9“Thanky lambda”操作符。例如,请参见

简而言之:

> foo2 = ->(arg) { arg * 2 }
> foo2.call "now"
 => nownow

注意
->
(arg)
之间缺少空格,这是故意的。

实际上,我很确定
->
(arg)
之间的空格是不需要的。刚刚在
irb
运行
ruby 1.9.3p484
时试用过。不确定早期版本中是否需要该空间。或者,为了清晰起见,你是说“有意”作为一种编码风格吗?啊,哦,我明白了。当使用paren时,需要空间,但不需要父级本身。因此,
foo2=->arg{arg*2}
将是有效的语法。@zealoushacker更正:-)我不使用parens更令人困惑,但这不是一个技术性的论点,而是一个风格性的论点,所以我不必费心去争论这些。(编辑)@Chloe不确定链接是什么,但该表达式使用了Dave所说的“刺伤lambda”操作符。它允许您定义匿名方法(另请参见lambda、Proc.new等)。请注意,原始问题中的
->{#code}
语法创建了一个没有参数的方法,也可以写成
->(){#code}
,这更像Dave的单参数
->(arg){#code}
示例。这一切与Ruby 1.9散列语法完全无关,尽管上下文很不幸。整个过程可以用Ruby 1.8编写为
{:default=>lambda{Time.now}
@zealoushacker Re:spacing,Ruby 1.9禁止在使用parens时在箭头后面加空格。例如,这会引发语法错误:
->(x){x}
。ruby 2.x中允许使用空格。