为什么这段代码不是在ruby 1.9上编译,而是在ruby 1.8上?

前端之家收集整理的这篇文章主要介绍了为什么这段代码不是在ruby 1.9上编译,而是在ruby 1.8上?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
抱歉标题,我不知道如何调用这种语法.

例如:

ary = [ [11,[1]],[22,[2,2]],[33,[3,3,3]] ]
# want to get [ [11,1],2],3] ]

Ruby 1.8

ary.map{|x,(y,)| [x,y] }
#=> [[11,3]]

ary.map{|x,(y)| [x,y] }
#Syntax error,unexpected '|',expecting tCOLON2 or '[' or '.'
#ary.map{|x,y] }
#                ^

Ruby 1.9

ary.map{|x,y] }
#SyntaxError: (irb):95: Syntax error,unexpected ')'
#ary.map{|x,y] }
#                ^

ary.map{|x,3]]

※我不是要求获得想要的阵列的方法.

我想知道为什么这段代码工作是Ruby的版本之一,但不是两者兼而有之.

解决方法

虽然Ruby 1.9对于列表和类似列表的表示中的逗号比以前的版本更加宽松,但是有一些新的场合会引发语法错误.这似乎是一个. Ruby 1.9严格地将其视为方法定义,并且不允许使用该逗号.

您似乎也遇到了Ruby 1.8.7中已经纠正的边缘案例错误.列表扩展方法似乎不仅适用于一个项目.

在这种情况下的快速解决方案可能是:

ary.map{|x,_)| [x,y] }

在这种情况下,_作为任何变量起作用.

在这两个版本中你都应该得到:

[[11,3]]
原文链接:https://www.f2er.com/ruby/267963.html

猜你在找的Ruby相关文章