gpt4 book ai didi

ruby - 了解 Ruby 中赋值和逻辑运算符的优先级

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

在以下示例中,我无法理解 Ruby 运算符的优先级:

x = 1 && y = 2

由于 && 的优先级高于 =,我的理解是类似于 +* 运算符:

1 + 2 * 3 + 4

解析为

1 + (2 * 3) + 4

它应该等于:

x = (1 && y) = 2

但是,所有 Ruby 源代码(包括内部语法解析器 Ripper)都将其解析为

x = (1 && (y = 2))

为什么?


编辑 [08.01.2016]

让我们关注一个子表达式:1 && y = 2

根据优先规则,我们应该尝试将其解析为:

(1 && y) = 2

这没有意义,因为 = 需要特定的 LHS(变量、常量、[] 数组项等)。但是既然 (1 && y) 是一个正确的表达式,那么解析器应该如何处理呢?

我试过咨询 Ruby 的 parse.y,但它太像意大利面条了,我无法理解具体的赋值规则。

最佳答案

简单。 Ruby 只会以有意义的方式解释它。 = 是赋值。在您的期望中:

x = (1 && y) = 2

1 && y 赋值是没有意义的。您只能将某些内容分配给变量或常量。

请注意,优先规则的目的是消除歧义表达式。如果一种解释方式没有意义,则不需要消歧,因此优先规则不会生效。

关于ruby - 了解 Ruby 中赋值和逻辑运算符的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34660807/

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