4

我已经阅读了The Ruby Programming Language中关于操作符的部分,这让我想到了操作符关联性。顺便说一句,这不是一个 Ruby 问题——它适用于所有语言。

我知道操作员必须以一种或另一种方式关联,我可以理解为什么在某些情况下一种方式比另一种更可取,但我很难看到更大的图景。语言设计者是否有一些标准来决定什么应该从左到右,什么应该从右到左?在某些情况下,它“只是有意义”,因为它是一种优于其他方式的方式,而在其他情况下,它只是一个武断的决定?或者这一切背后是否有某种宏大的设计?

4

3 回答 3

7

通常它的语法是“自然的”:

  • 考虑x - y + z。你希望它是从左到右的,这样你得到(x - y) + z而不是x - (y + z).
  • 考虑a = b = c。你希望它是从右到左的,所以你得到a = (b = c),而不是(a = b) = c

我想不出一个选择似乎是“任意”做出的例子。

免责声明:我不懂 Ruby,所以我上面的例子是基于 C 语法的。但我确信同样的原则也适用于 Ruby。

于 2010-10-17T18:18:30.467 回答
4

想象一下用括号写一两个世纪的一切。您将体验到哪个运算符最有可能首先将其值绑定在一起,以及哪个运算符最后绑定在一起。如果您可以定义这些运算符的关联性,那么您希望以一种最小化括号的方式定义它,同时以易于阅读的术语编写公式。即 (+) 之前的 (*) 和 (-) 应该是左关联的。

顺便说一下,左/右关联与左/右递归的含义相同。联想一词是数学视角,递归是算法。(见“end-recursive”,看看你写最多括号的地方。)

于 2010-10-17T18:59:27.693 回答
0

comp sci 中的大多数运算符关联性直接来自数学。特别是符号逻辑和代数。

于 2010-10-17T18:18:56.947 回答