old*_*god 7 ruby ruby-1.9 ruby-1.8
抱歉标题,我不知道如何调用这种语法.
例如:
ary = [ [11, [1]], [22, [2, 2]], [33, [3, 3, 3]] ]
# want to get [ [11, 1], [22, 2], [33, 3] ]
Run Code Online (Sandbox Code Playgroud)
Ruby 1.8
ary.map{|x, (y,)| [x, y] }
#=> [[11, 1], [22, 2], [33, 3]]
ary.map{|x, (y)| [x, y] }
#Syntax error, unexpected '|', expecting tCOLON2 or '[' or '.'
#ary.map{|x, (y)| [x, y] }
# ^
Run Code Online (Sandbox Code Playgroud)
Ruby 1.9
ary.map{|x, (y,)| [x, y] }
#SyntaxError: (irb):95: syntax error, unexpected ')'
#ary.map{|x, (y,)| [x, y] }
# ^
ary.map{|x, (y)| [x, y] }
#=> [[11, 1], [22, 2], [33, 3]]
Run Code Online (Sandbox Code Playgroud)
※ 我不是要求获得通缉阵列的方法.
我想知道为什么这段代码工作是Ruby的版本之一,但不是两者兼而有之.
虽然Ruby 1.9对于列表和类似列表的表示中的逗号比以前的版本更加宽松,但是在某些新的情况下它会引发语法错误.这似乎是一个.Ruby 1.9严格地将其视为方法定义,并且不允许使用该逗号.
你似乎还遇到了Ruby 1.8.7中已经纠正的边缘案例错误.列表扩展方法似乎不仅适用于一个项目.
在这种情况下快速解决方案可能是:
ary.map{|x, (y,_)| [x, y] }
Run Code Online (Sandbox Code Playgroud)
在这种情况下,_函数作为任何变量.
在这两个版本中你都应该得到:
[[11, 1], [22, 2], [33, 3]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |