Ruby单行变量赋值异常:为何num_1被赋值为[1,2]而非1?
为什么Ruby中
num_1 = 1, num_2 = 2会让num_1变成[1,2]? 这其实是Ruby的数组字面量语法和赋值表达式的求值规则共同作用的结果,我来给你拆解清楚:
1. 代码的实际解析逻辑
你写的num_1 = 1, num_2 = 2,Ruby并不会把它当成“给num_1赋值1,给num_2赋值2”的并行操作,而是会这样解析:
num_1 = (1, num_2 = 2)
这里的逗号是用来创建数组的——Ruby中,用逗号分隔的多个表达式会被自动打包成一个数组字面量。而num_2 = 2本身是一个赋值表达式,它的求值结果就是被赋的值2,同时这个表达式会执行赋值操作,把num_2设为2。
所以整个右边的表达式1, num_2 = 2等价于[1, 2],最终这个数组被赋值给了num_1,这就是为什么num_1会变成[1,2],而num_2因为单独执行了赋值,所以是2。
2. 如何实现你预期的“分别赋值”?
如果你想让num_1=1、num_2=2,需要用Ruby的并行赋值语法,把变量放在左边用逗号分隔:
num_1, num_2 = 1, 2
这时候Ruby会把右边数组的每个元素,依次赋值给左边对应的变量,结果就是num_1=1,num_2=2,和你的预期一致。
再举个例子验证
执行这段代码:
x = 3, y = 4 puts x.inspect # 输出 [3, 4] puts y.inspect # 输出 4
和你的情况完全一致,进一步验证了这个逻辑。
内容的提问来源于stack exchange,提问作者Dyaniyal Wilson
相关产品推荐
相关产品推荐

