了解范围和数组中的ruby splat

我试图理解*(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]

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

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

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