11

我试图理解和之间的*(1..9)区别[*1..9]

如果我将它们分配给变量,它们的工作方式相同

splat1 = *(1..9)  # splat1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
splat2 = [*1..9]  # splat2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

但是当我尝试直接使用*(1..9)和时事情变得很奇怪[*1..9]

*(1..9).map{|a| a.to_s}  # syntax error, unexpected '\n', expecting tCOLON2 or '[' or '.'
[*1..9].map{|a| a.to_s}  # ["1", "2", "3"...]

我猜部分问题在于操作员的偏好?但我不确定发生了什么。为什么我不能使用*(1..9)我可以使用的相同[*1..9]

4

1 回答 1

9

我认为问题在于 splat 只能用作左值,即它必须被某些东西接收。

所以你的例子*(1..9).map失败了,因为没有接收者 splat,但是[*1..9].map因为你正在创建的数组是 splat 的接收者,所以工作正常。

更新:有关此线程的更多信息(尤其是最后一条评论):在哪里使用 ruby​​ splat 运算符是合法的?

于 2011-09-26T15:28:44.863 回答