有人可以说ruby如何评价这个:
a = 1
b = 2
a, b = b, a + b
a将为2,b将为3,而不是4,如您所料
似乎不是从左到右工作,而是以某种方式平行地进行双方?
答案 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
赋值。我邀请在这里进行更正。