Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解范围和数组中的ruby splat_Ruby_Splat - Fatal编程技术网

理解范围和数组中的ruby splat

理解范围和数组中的ruby splat,ruby,splat,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',

我试图理解
*(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的收件人

更新: 有关此线程的更多信息(特别是最后一条评论):

p*(1..9).map{a | a.to _s}
也可以类似地工作,
([*1..9])。map
应该可以正常工作;然而,我认为显式的
to_a
方法更清晰,本质上也同样简洁。