2013-03-06 34 views
4

我正在嘗試通過Dolphin Smalltalk X6附帶的教程學習Smalltalk。「:=」和Smalltalk中的二進制消息優先級

我的問題涉及評估帶有多條消息的表達式。

我的理解是,首先評估簡單的消息,然後評估二進制消息,最後評估關鍵字消息(除了括號中的代碼)。但是,在下面的示例中(第Dolphin Smalltalk tutorial中發現),我無法將此理解應用於第二行。

playground := Playground new. 
    teresa := playground add: Triangle new.  "Misunderstood code" 
    teresa class.         "Evaluates to 'Triangle'" 

如果我的理解是正確的,2號線將正是如此評價:

1. Simple message 'new' sent to Triangle, triangle object as response 
    2. Binary message ':=' with parameter 'playground' sent to 'teresa'. 
    3. Keyword message 'add:' with parameter 'triangle object' sent to 'teresa'. 
    4. teresa class. "evaluates to 'Playground'". 

我的誤解是如何「鄧麗君」來指代匿名三角對象,而不是遊樂場對象簡稱到'遊樂場'。

我已經查閱了關於Smalltalk評估的第二個解釋,提及:=或添加:是沒有成功的特殊情況,我能想到的唯一的其他解釋是一個根本性的誤解。

任何幫助矯直我?

回答

7

雖然:=看起來像二進制信息,因爲它使用中綴字符......它不是。它是語言句法的一部分,與parens和句點(例如)相同。

想想:=作爲賦值運算符(有時被稱爲「獲取」)。它不是任何優先級的消息。它在任何消息發送後被評估。它的左值必須是直接變量引用(不是消息發送的結果)。

8

賦值運算符(:=)不是消息。 (它不會被髮送到一個對象,而是它表示一個變量應該是設置爲一個值)。它的優先級總體上是最後的。

那麼什麼情況是:

  1. 簡單的消息「新的」發送到三角,三角形對象作爲響應
  2. 關鍵字信息加:發送到操場上,有這麼添加約定:消息接聽對象添加,這似乎跟隨,所以新創建的三角形返回。
  3. 將變量teresa設置爲新的三角形
  4. teresa類。 「評估爲三角形」。
+0

讓人想知道爲什麼:=不是Smalltalk中的消息。爲什麼不讓變量接收:=? – Hendekagon 2013-03-11 05:50:11

+1

因爲變量實際上是指向對象的指針,所以它不是對象本身。消息發送給變量指向的對象,而:=運算符則更改變量指向的對象。 – 2013-03-12 22:55:02

+0

hmm對象指針不是對象,所以它們不能接收:=(或pointTo:anObject或→) – Hendekagon 2013-04-18 00:20:37