簡體   English   中英

Small:中的“:=”和二進制消息優先級

[英]“:=” and binary message precedence in Smalltalk

我試圖通過Dolphin Smalltalk X6附帶的教程學習Smalltalk。

我的問題涉及對具有多個消息的表達式的評估。

我的理解是首先評估簡單消息,然后評估二進制消息,最后評估關鍵字消息(括號中的代碼除外)。 但是,我無法將這種理解應用到以下示例中的第二行(在Dolphin Smalltalk教程中找到 )。

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

如果我的理解是正確的,那么第二行將被評估:

    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'".

我的誤解是'teresa'如何引用匿名Triangle對象而不是'playground'引用的Playground對象。

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

任何幫助拉直我的幫助?

賦值運算符(:=)不是消息。 (它不會發送到對象,而是表示應將變量設置為值)。 它的優先級總體上是最后的。

那么會發生什么:

  1. 簡單的消息'new'發送到Triangle,三角形對象作為響應
  2. 關鍵字消息添加:發送到操場,並且有一個添加的約定:消息回答添加的對象,這似乎遵循,因此返回新創建的三角形。
  3. 變量teresa設置為新三角形
  4. 特蕾莎修課。 “評估三角”。

雖然:=看起來像二進制消息,因為它使用中綴字符......但事實並非如此。 它是語言語法的一部分,與parens和句點相同(例如)。

想一想:=作為賦值運算符(有時稱為“獲取”)。 它不是任何優先級的消息。 它會在任何消息發送后進行評估。 它的左值必須是直接變量引用(不是消息發送的結果)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM