我试图理解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
Run Code Online (Sandbox Code Playgroud)
我假设先分配“ u”,然后分配v,但是更明确地编写它会破坏算法。
u = v
v = u % v
Run Code Online (Sandbox Code Playgroud)
当你写下这个:
u = v
v = u % v
Run Code Online (Sandbox Code Playgroud)
我认为这只是这样的事情:
u = v
v = v % v # u == v, this will make v to be 0, so break it down
Run Code Online (Sandbox Code Playgroud)
我将尝试回答多变量赋值问题。这是我的测试代码:
a = 1
b = 2
a, b = 3, a # after this, a == 3, b == 1
Run Code Online (Sandbox Code Playgroud)
你可以看到,就像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]]]]]]]
Run Code Online (Sandbox Code Playgroud)
正如我上面所说,您会看到:mrhs_new_from_args
将首先对其进行评估。