[英]“:=” 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評估的第二個解釋,提到:=或添加:是特殊情況沒有成功,我能想到的唯一其他解釋是一個根本的誤解。
任何幫助拉直我的幫助?
賦值運算符(:=)不是消息。 (它不會發送到對象,而是表示應將變量設置為值)。 它的優先級總體上是最后的。
那么會發生什么:
雖然:=看起來像二進制消息,因為它使用中綴字符......但事實並非如此。 它是語言語法的一部分,與parens和句點相同(例如)。
想一想:=作為賦值運算符(有時稱為“獲取”)。 它不是任何優先級的消息。 它會在任何消息發送后進行評估。 它的左值必須是直接變量引用(不是消息發送的結果)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.