7

对不起标题,我不知道这个语法是怎么调用的。

例如:

ary = [ [11, [1]], [22, [2, 2]], [33, [3, 3, 3]] ]
# want to get [ [11, 1], [22, 2], [33, 3] ]

红宝石 1.8

ary.map{|x, (y,)| [x, y] }
#=> [[11, 1], [22, 2], [33, 3]]

ary.map{|x, (y)| [x, y] }
#Syntax error, unexpected '|', expecting tCOLON2 or '[' or '.'
#ary.map{|x, (y)| [x, y] }
#                ^

红宝石 1.9

ary.map{|x, (y,)| [x, y] }
#SyntaxError: (irb):95: syntax error, unexpected ')'
#ary.map{|x, (y,)| [x, y] }
#                ^

ary.map{|x, (y)| [x, y] }
#=> [[11, 1], [22, 2], [33, 3]]

我不是在寻求获得想要的数组的方法。

我想知道为什么这段代码可以工作是 Ruby 的版本之一,而不是两者

4

1 回答 1

5

虽然与以前的版本相比,Ruby 1.9 通常对列表中的尾随逗号和类似列表的表示形式更为宽松,但在某些新情况下它会引发语法错误。这似乎是一个。Ruby 1.9 将其严格地视为方法定义,并且不允许使用杂散逗号。

您似乎还遇到了 Ruby 1.8.7 中已更正的边缘情况错误。列表扩展方法似乎不适用于仅一项。

在这种情况下,快速修复可能是:

ary.map{|x, (y,_)| [x, y] }

在这种情况下_,函数作为任何变量。

在这两个版本中,您应该得到:

[[11, 1], [22, 2], [33, 3]]
于 2012-11-30T06:56:01.173 回答