这个表达式是如何评估的

时间:2014-04-10 09:36:20

标签: ruby

有人可以说ruby如何评价这个:

a = 1
b = 2
a, b = b, a + b

a将为2,b将为3,而不是4,如您所料

似乎不是从左到右工作,而是以某种方式平行地进行双方?

3 个答案:

答案 0 :(得分:3)

表示为: -

a = 1
b = 2
a, b = b, (a + b)
a # => 2
b # => 3

这称为并行分配。这里将首先评估所有 RHS 表达式(从左到右)。之后,从从左到右发生了这项任务。

这意味着,计算方法如下:

a, b = b, a + b
a, b = 2, (2 + 1)
a, b = 2, 3 # now the real assignment will be happened here.

答案 1 :(得分:2)

这称为并行关联,并且,如名称所示,它的工作方式与所有分配并行完成一样。你可以写一下:

a = 1
b = 2
a, b = b, a

a   #=> 2
b   #=> 1

答案 2 :(得分:0)

a = 1
b = 2
a, b = b, a + b
a
#=> 2
b 
#=> 3

这里,第一个rvalue被分配给第一个左值,第二个rexp的结果被赋给第二个左值。这些作业parallel本质上不是sequential

a, b = b, a是使用parallel分配的交换操作。这让我觉得Ruby可能正在使用temporary变量来执行parallel赋值。我邀请在这里进行更正。