gpt4 book ai didi

ruby - ||之间的区别a = b 和 a = a || b 在 ruby 中?

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

谁能解释一下这个表达式。似乎两者相同,但实际上并非如此。

a || a = b or a ||= b

a = a || b

如果

a = 4b = 6,输出总是4

这总是让我感到困惑和误解。有人可以解释一下吗?

最佳答案

a || a = b

如果 a 为真,则查找 a,返回 a,否则 a = b 完成,即你将 b 的值赋给 a

a = a || b

这是一个赋值操作。在这里,您正在为 a 赋值,而不管它持有什么值。所以 a 等于 a || b。在语句的第二部分,您正在寻找 a。如果它的值是真值,则将其赋值回 a 本身,否则将 b 的值赋给 a

长话短说

a = a || b 正在为 a 分配一个值(取决于条件),而不管它持有什么值。

a ||= b 如果已经存在则返回 a,否则返回 a = b

举例说明:

你可以想到一个|| a = b 作为 a || (a = b)。现在假设 a = 4b = 6

由于按优先顺序,这是一个 OR 运算,并且由于 OR 的运算顺序是从左到右,我们从第一个 a 开始:

 # lets call this Fig. 1
a || (a = b)
^
|
.
(here)

这个 a 的值为 4,这是一个真值。因此评估就此停止并返回 4。 (为什么?提示: true || anything = true)

现在假设 a = nilb = 6。我们从同一个地方重新开始(图 1)。由于 anil 这在 Ruby 中是错误的,我们移动到 OR 运算的右侧,即 a = b

 # lets call this Fig. 2
a || (a = b)
^
|
.
(here)

因为这是一个赋值操作,它会被执行,我们最终会将 6 赋值给 a

回到a = a || b。您可以将其视为 a = (a || b)。显然,按优先顺序,它是一个赋值操作。由于赋值操作的顺序是从右到左,因此首先评估 (a || b)

 # lets call this Fig. 3
a = (a || b)
^
|
.
(here)

如果 a = 4b = 6a || b 将返回 4 (如上所述)。否则如果 a = nilb = 6a || b 将返回 6

现在从这个|| 操作返回的任何值都被分配给第一个a

 # lets call this Fig. 4
a = (a || b)
^
|
.
(here)

关于ruby - ||之间的区别a = b 和 a = a || b 在 ruby 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30524499/

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