gpt4 book ai didi

ruby - 多个变量赋值是同时完成的吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:00 25 4
gpt4 key购买 nike

我试图理解用于寻找最大公约数的欧几里德算法,但在使用这段代码时遇到困难,特别是多变量赋值。

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

最佳答案

当你这样写的时候:

    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 会像我上面说的那样首先被评估。

关于ruby - 多个变量赋值是同时完成的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38537244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com