gpt4 book ai didi

Ruby 奇数逗号与一系列变量一起使用

转载 作者:数据小太阳 更新时间:2023-10-29 08:15:54 26 4
gpt4 key购买 nike

这个问题不太可能对 future 的访客有帮助;它只与一个小的地理区域、一个特定的时刻或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the help center .




8 年前关闭。




你好 StackOverflow 工作人员!

我们正在做一些 Ruby 并且出现了一个我们似乎很难弄清楚的例子:

a=5
b=4
a,b=a+b,a

=> [9,5]
=> a=9
=> b=5

怎么来的?那里发生了什么事?为什么它有效而“a,b,a”不起作用?
为什么“b”变成5而“a”变成9?

如果我们只写
a,b=a+b

=> 9
=> a=9
=> b=nil

我们猜测这是某种 Ruby 错误,将在 2.5 版中修复。
或者可能有一些潜在的法律正在实现,我们只是还没有看到。

你们会帮助我们吗?

示例代码是斯坦福 Ruby 类(class)的一个测验问题的一部分。他们告诉我们在遇到困难时去问问 StackOverflow 的天才。

最佳答案

对我而言,您似乎误解了并行赋值运算符的用法,而不是 Ruby 错误。

前一个例子和后一个例子大不相同。让我们把它们放在一起:

a,b=a+b,a
a,b=a+b

现在添加一些空格
a,b =  a+b, a
a,b = a+b

第一个表达式是 LHS 的并行赋值 a, ba+b , a 的 RHS ,后者与 a, b的LHS并行赋值和 a+b 的 RHS .请注意 RHS 中的差异。

这两个等于:

(1)
a =  a+b
b = a' **

(2)
a =  a+b
b = nil

但是,请注意,这一切都是一次操作。因此,在 (1) 情况下,它是 A' 而不是 A:使用的是 'a' 的 OLD VALUE,而不是刚刚分配的 'a+b' 中的值 - 因为原始并行赋值是一次操作,而不是两次操作就像我为了描述目的在这里爆炸一样。

这意味着:
a,b = a+b, a

原因 s1=a+b待计算, s2=a要计算,然后 a=s1; b=s2;只是在“一次操作”中。

由于它是一个操作,并且当它分配给两个值时,将返回一个包含两个元素的数组 - 与执行单一赋值并返回单个值时相反。

如果您要执行三重分配:
a,b,c,d,e,f  = 0,1,2,3,4,5

一个 [0,1,2,3,4,5] 数组将成为结果,而 a/b/c/d/e/f 将分别被分配 0/1/2/3/4/5 值。

有关更多信息,请参阅 Ruby 的并行赋值文档,也可能是 * 用于数组扩展和参数分组的运算符

关于Ruby 奇数逗号与一系列变量一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15275943/

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