Odersky具有出色的Java语法优化,无需点和括号即可启用对象调用。即现在只需编写list.prepend(item)
而不是list :: item
,它也将语言运算符转换为简单的对象方法。这里,List定义了::
(prepend)运算符。但是,您通常使用item :: list
在Scala中将其反复写入。它表明每个(可列表)类型都定义了::(List)
运算符,这是令人难以置信的。如何实现操作数反转?我无法从源代码
class List[+A] extends AbstractSeq[A]
def ::[B >: A] (x: B): List[B] =
new scala.collection.immutable.::(x, this)
似乎::(val头,val尾)也代表一个类型名称。但它无论如何都不适合head :: tail
模式。
答案 0 :(得分:4)
任何右侧有:
的运算符都会翻转其操作数。还有其他运营商也在使用它(虽然不能想到任何例子)。