多个变量赋值是否同时完成?

时间:2016-07-23 01:20:31

标签: ruby variables

我试图理解Euclid的算法,找出最大的公约数,并且我对这段代码有困难,特别是多变量赋值。

def greatest_common_factor(u, v)
  u, v = u.abs, v.abs
  puts(u % v)
    while v > 0
  u, v = v, u % v
    end
  u
end

我认为'u'将首先被分配,然后是v,但是更明确地写它会破坏算法。

u = v
v = u % v

1 个答案:

答案 0 :(得分:1)

当你这样写:

    u = v
    v = u % v

我认为它只是这样:

    u = v
    v = v % v # u == v, this will make v to be 0, so break it down

我将尝试回答多变量赋值问题。这是我的测试代码:

    a = 1
    b = 2
    a, b = 3, a # after this, a == 3, b == 1

您可以看到,它就像a, b = [3, a]一样,您将首先评估[3, a]部分。这里有Ripper分析:

    [:program,
     [[:massign,
       [[:@ident, "a", [1, 0]], [:@ident, "b", [1, 2]]],
       [:mrhs_new_from_args,
        [[:@int, "3", [1, 4]]],
        [:var_ref, [:@ident, "a", [1, 6]]]]]]]

如上所述,您将看到:mrhs_new_from_args将首先进行评估。