我想明白之间的差别*(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]
Run Code Online (Sandbox Code Playgroud)
但是,事情变得奇怪,当我尝试使用*(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"...]
Run Code Online (Sandbox Code Playgroud)
我猜测问题的一部分是运营商的预测?但我不确定发生了什么.为什么我无法使用*(1..9)我可以使用的相同功能[*1..9]?
我认为问题是splat只能用作左值,即它必须被某些东西接收.
所以你的例子*(1..9).map失败了,因为splat没有收件人,但是[*1..9].map因为你正在创建的数组是splat的接收者而起作用.
更新:关于此线程的更多信息(尤其是最后一条评论):使用ruby splat运算符在哪里合法?
| 归档时间: |
|
| 查看次数: |
2643 次 |
| 最近记录: |