3 回答

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