Odersky精心優化了Java語法,支持無圓點和圓括號的對象調用。即而不是list.prepend(item)
,現在您只需編寫list :: item
,這也將語言運算符轉換爲簡單的對象方法。這裏,List定義了::
(前置)運算符。但是,您通常在Scala中使用item :: list
將它寫成副詞。它表明每個(可列出的)類型都定義了::(List)
運算符,這是令人難以置信的。操作數反轉如何實現?我無法從源代碼中找到它Scala中的操作數順序List.prepend(::)
class List[+A] extends AbstractSeq[A]
def ::[B >: A] (x: B): List[B] =
new scala.collection.immutable.::(x, this)
看起來::(val頭,val尾)也代表一個類型名稱。但它無論如何不適合head :: tail
模式。
'::'是Scala的「cons」,非空列表和對應於'Nil'。請注意,您也可以使用中綴表示法來表示二進制類型的構造函數 - 將泛型類型視爲產生結果類型的「類型函數」:'type \/[+ A,+ B] =或者[A,B]'then 'def foo:String \/Int = ???'。 –