You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:16:39