ruby - 了解范围和数组中的 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', 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 的接收者。

更新: 有关此线程的更多信息(尤其是最后一条评论):Where is it legal to use ruby splat operator?

关于ruby - 了解范围和数组中的 ruby​​ splat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7557382/

相关文章:

ruby-on-rails - :alert does not work; :notice does

ruby - Ruby on Rails 中的实用程序类

ruby - 使用 XPath 选择根和子匹配表达式

ruby - 为什么使用 Ruby splat 会引发错误?

c++ - 纹理splat opengl的最有效方法?

ruby - 无法安装 gem - extconf.rb 失败

mysql - 我应该在 ubuntu Natty Narwhal 中安装哪个版本的 percona db 包?

Julia:使用 splat 传递参数

ruby - `nil` 上的双响

ruby - Ruby 中允许 "p *1..10"打印出数字 1-10 的功能是什么?