2011-06-19 44 views
4

我想稍微說明返回 聲明的優先級,這看起來違背了一般優先級 規則。Smalltalk Return Precedence

例如表達

^ 2 + 3. 

收益5(這是我想要的),但不應該它,因爲一元運算符 其中^是一個在+是二進制具有更高的優先級僅2返回? 。

回答

10

Smalltalk中沒有「一元運算符」。只有3個優先級別:一元消息(「接收者消息」),二元運算符(「接收者+參數」)和n元關鍵字消息(「接收者消息:參數1」)。在所有情況下,接收器都是第一個。

所以「^」不是一個運算符,而是表示一個返回語句。同樣,在「-4」中,「 - 」不是操作符,而是數字文字的一部分。

+0

所以我把它倒過來了,我一直在想^是一個要發送給2的消息。謝謝,這清除了它。 – Jatajuuf

+0

'^'是發送給thisContext的消息,如果你想到它(或thisContext父項)^^ – mathk

+0

請注意,在吱吱聲3.9之前,一個空格被接受在否定字面數中,例如-3。這被刪除,因爲沒有記錄並且可能被視爲一元運營商,這是一個混亂的根源。 –

1

Smalltalk的^真的是運營商?我想這是一個保留的符號。那麼當週圍的方法返回時,「懸掛」+ 3會發生什麼?我認爲這種行爲是正確的,因爲return語句是在「正常」Smalltalk方法中發生的最後一個聲明。

問候

+0

我的意思是互換地暗示操作符/方法。行爲是正確的,但我想知道如何定義^的優先規則,以及它是否被特殊處理。 – Jatajuuf

3

返回符號,^,是爲數不多的語言內建的結構之一。 Smalltalk將返回^符號後面的表達式的值。

+0

不完全:>>表達式<<後面的^符號 – blabla999

+0

這樣做更有意義,是的:)編輯。 – SHODAN