之前一直没注意到这个问题。
在将 a , b 进行赋值值时:
a = 3, b = 5
按照之前的理解,这时 a = 3, b = 5. 可是当带入后面的代码时居然一直报 a,b 类型出错,于是打开 irb 检查一番
> a = 3, b = 5
=> [3,5]
> a
=> [3,5]
> b
=> 5
> a.class
=> Array
> b.class
=> Fixnum
一看竟是如此!此时 a 是数组类型,b 是数值类型,原来 Ruby 中简单的赋值也是并非 C 中那样……
是你自己坑吧,就算是 C 里也应该是 a = 3 ; b = 5 啊,而且这明显要用到 ruby 里的并行赋值也就是 1 楼说的那样,明明是你自己概念不清,还好意思怪 ruby 赋值坑。。。ruby 是有一些看起来像黑魔法一样的容易坑人的地方。。。但你说的这个,真的不是,所以,赶紧把标题改了好好看看 ruby 基础
在 c/c++ 里 a = 3, b = 5 是可以的,中间的逗号,就是逗号运算符,
在 ruby 中 a = 3, b = 5 ruby 并没有逗号运算符,这个表达式就相当于 a = 3, (b = 5), 也就是 a = 3, 5 ruby 的赋值操作有这样的特性,左边一个变量,右边多个值时,ruby 会创建一个包含右边值的数组,并赋值给左边的变量。
可以试试 a, = 3, b = 5 p a, b
当然不建议这么做。
@jyootai 嗯,C 只考过 2 级,这个确实不知道,长知识了,不过我的 C 基础跟我的 ruby 基础无关吧,我想说的是你自己想当然认为你被 ruby 坑了,就跑过来说 ruby 赋值有坑,这点不太好吧
@chiangdi a, = 3, 5 如同 a, _ = 3, 5 告诉 ruby,赋值号左边有类似给多个变量赋值的行为,即不把 [3,5] 赋给 a, 只把 3 赋值给 a
这些在 <>书中有讲。