4

我已经到了The Ruby Programming Language的运营商部分,这让我想到了运营商关联性。这不是一个Ruby问题,它适用于所有语言。为什么不同的操作员有不同的关联性?

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

回答

7

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

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

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

声明:我不知道Ruby,所以我上面的示例基于C语法。但我相信Ruby中也适用相同的原则。

+0

谢谢。这个问题并不是关于Ruby的 - 这正是我开始思考这一切的开始。 – Skilldrick 2010-10-17 18:20:54

0

comp sci中的大多数操作员关联性都直接从数学中删除。具体的符号逻辑和代数。

4

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

顺便说一下,左/右联合表示与左/右递归相同。关联这个词是数学观点,递归的算术。 (参见“end-recursive”,并看看你写的最多的括号。)

+0

+1用于长期最小化括号 – Museful 2012-11-26 20:57:34

相关问题