3 回答

TA貢獻(xiàn)1862條經(jīng)驗 獲得超6個贊
你似乎偶然發(fā)現(xiàn)了答案。無論如何,我會盡力說清楚。
使用前綴,中綴和后綴表示法時可省略點 - 所謂的運算符表示法。使用運算符表示法時,只有這樣,如果傳遞給方法的參數(shù)少于兩個,則可以省略括號。
現(xiàn)在,運算符表示法是方法調(diào)用的表示法,這意味著它不能在沒有被調(diào)用的對象的情況下使用。
我將簡要介紹一下這些符號。
字首:
只有~
,!
,+
并且-
可以在前綴符號使用。這是當(dāng)你寫你所使用的符號!flag
或val liability = -debt
。
中綴:
這是方法出現(xiàn)在對象和它的參數(shù)之間的符號。算術(shù)運算符都適合這里。
后綴(也是后綴):
當(dāng)方法跟隨對象并且不接收任何參數(shù)時,使用該表示法。例如,您可以編寫list tail
,這是后綴表示法。
只要沒有方法,就可以毫無問題地鏈接中綴符號。例如,我喜歡使用以下樣式:
(list filter (...) map (...) mkString ", ")
這與以下內(nèi)容相同:
list filter (...) map (...) mkString ", "
現(xiàn)在,為什么我在這里使用括號,如果filter和map只使用一個參數(shù)?這是因為我將匿名函數(shù)傳遞給他們。我不能將匿名函數(shù)定義與中綴樣式混合,因為我需要一個邊界來結(jié)束我的匿名函數(shù)。此外,匿名函數(shù)的參數(shù)定義可能被解釋為中綴方法的最后一個參數(shù)。
您可以使用具有多個參數(shù)的中綴:
string substring (start, end) map (_ toInt) mkString ("<", ", ", ">")
使用中綴表示法很難使用Curried函數(shù)。折疊功能就是一個明顯的例子:
(0 /: list) ((cnt, string) => cnt + string.size)(list foldLeft 0) ((cnt, string) => cnt + string.size)
您需要在中綴調(diào)用之外使用括號。我不確定這里的確切規(guī)則。
現(xiàn)在,我們來談?wù)刾ostfix。Postfix可能很難使用,因為除了表達(dá)式的結(jié)尾之外,它永遠(yuǎn)不會被使用。例如,您無法執(zhí)行以下操作:
list tail map (...)
因為尾部沒有出現(xiàn)在表達(dá)式的末尾。你不能這樣做:
list tail length
您可以使用括號來標(biāo)記表達(dá)式的結(jié)尾來使用中綴表示法:
(list tail) map (...) (list tail) length
請注意,不建議使用后綴表示法,因為它可能不安全。
我希望這已經(jīng)消除了所有的疑慮。如果沒有,只需發(fā)表評論,我就會看到我可以做些什么來改進(jìn)它。
添加回答
舉報