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

相關問題