Swift運算符聲明
運算符聲明
運算符聲明會向程序中引入中綴、前綴或後綴運算符,它使用上下文關鍵字operator
聲明。 可以聲明三種不同的綴性:中綴、前綴和後綴。操作符的綴性描述了操作符與它的操作數的相對位置。 運算符聲明有三種基本形式,每種綴性各一種。運算符的綴性通過在operator
和運算符之間添加上下文關鍵字infix
,prefix
或postfix
來指定。每種形式中,運算符的名字只能包含Operators中定義的運算符字符。
下面的這種形式聲明瞭一個新的中綴運算符:
operator infix
operator name
{
previewprecedenceprecedence level
associativityassociativity
}
中綴運算符是二元運算符,它可以被置於兩個操作數之間,比如表達式1 + 2
中的加法運算符(+
)。
中綴運算符可以可選地指定優先級,結合性,或兩者同時指定。
運算符的優先級可以指定在沒有括號包圍的情況下,運算符與它的操作數如何緊密綁定的。可以使用上下文關鍵字precedence
並優先級(precedence level)一起來指定一個運算符的優先級。優先級可以是0到255之間的任何一個數字(十進制整數);與十進制整數字面量不同的是,它不可以包含任何下劃線字符。儘管優先級是一個特定的數字,但它僅用作與另一個運算符比較(大小)。也就是說,一個操作數可以同時被兩個運算符使用時,例如2 + 3 * 5
,優先級更高的運算符將優先與操作數綁定。
運算符的結合性可以指定在沒有括號包圍的情況下,優先級相同的運算符以何種順序被分組的。可以使用上下文關鍵字associativity
並結合性(associativity)一起來指定一個運算符的結合性,其中結合性可以說是上下文關鍵字left
,right
或none
中的任何一個。左結合運算符以從左到右的形式分組。例如,減法運算符(-
)具有左結合性,因此4 - 5 - 6
被以(4 - 5) - 6
的形式分組,其結果爲-7
。 右結合運算符以從右到左的形式分組,對於設置爲none
的非結合運算符,它們不以任何形式分組。具有相同優先級的非結合運算符,不可以互相鄰接。例如,表達式1 < 2 < 3
非法的。
聲明時不指定任何優先級或結合性的中綴運算符,它們的優先級會被初始化爲100,結合性被初始化爲none
。
下面的這種形式聲明瞭一個新的前綴運算符:
operator prefix
operator name
{}
緊跟在操作數前邊的*前綴運算符(prefix operator)*是一元運算符,例如表達式++i
中的前綴遞增運算符(++
)。
前綴運算符的聲明中不指定優先級。前綴運算符是非結合的。
下面的這種形式聲明瞭一個新的後綴運算符:
operator postfix
operator name
{}
緊跟在操作數後邊的*後綴運算符(postfix operator)*是一元運算符,例如表達式i++
中的前綴遞增運算符(++
)。
和前綴運算符一樣,後綴運算符的聲明中不指定優先級。後綴運算符是非結合的。
聲明瞭一個新的運算符以後,需要聲明一個跟這個運算符同名的函數來實現這個運算符。如何實現一個新的運算符,請參考Custom Operators。
運算符聲明語法
運算符聲明 → 前置運算符聲明 | 後置運算符聲明 | 中置運算符聲明
前置運算符聲明 → 運算符 prefix 運算符 { }
後置運算符聲明 → 運算符 postfix 運算符 { }
中置運算符聲明 → 運算符 infix 運算符 { 中置運算符屬性 可選 }
中置運算符屬性 → 優先級子句 可選 結和性子句 可選
優先級子句 → precedence 優先級水平
優先級水平 → 數值 0 到 255
結和性子句 → associativity 結和性
結和性 → left | right | none