Ruby 定义数组可以不要括号?

wilikeit · 2018年02月23日 · 最后由 YanhaoMo 回复于 2018年02月25日 · 2652 次阅读

如: arr=1,2,"hello" puts arr.class #out:Array 如果能这样定义数组,太方便了点,都不用写括号,不知道这样做可行不?

msl12 回复

可是运行时解释器没有报错,那就是说这种写法是对的咯,为啥不行,是不符合代码规范,还是说有隐藏的 bug

可以这样定义, 类似的还有 %w(1 a) # 都是 string 以及 a, b = "1", "2"a, b = [1, 2]

这是一个冷知识。虽然看起来不可思议,但确实可以,见 Implicit Array Assignment

a = 1, 2, 3

p a # prints [1, 2, 3]

不过谁真在项目里这么写肯定拉出去砍了。太不直观,容易误读。

[1] pry(main)> a, b = 1, 2
=> [1, 2]
[2] pry(main)> a
=> 1
[3] pry(main)> b
=> 2
[4] pry(main)> 

一般是给这种用法用的。

真是第一次见,%w倒是挺常用的

darkbaby123 回复

说明楼主完全没动手实验过

a = 1, 2, 3
p a # prints [1, 2, 3]
a, = 1, 2, 3
p a # prints 1
wilikeit 回复

咦,我没试过,还以为会报错呢

darkbaby123 回复

ruby 真的写法太多了,有点不敢再研究语法糖 了,太甜了

不然你以为

a, b = 1, 2

是啥原理😉 之前还有人提 issue 希望 Ruby 能够增加像 JavaScript 一样的解构赋值,Matz 说太容易有语法二义性了,大概这也是语法糖太多的弊端吧

这种问题随手实验一下就知道啦

需要 登录 后方可回复, 如果你还没有账号请 注册新账号