Scala 中的操作数顺序 List.prepend (::)

Operand order in Scala List.prepend (::)

Odersky 出色地优化了 Java 语法,使对象调用无需点和括号。 IE。而不是 list.prepend(item),您现在只需编写 list :: item,这也将语言运算符转换为简单的对象方法。在这里,List 定义了 ::(前置)运算符。但是,您通常在 Scala 中使用 item :: list 来反写它。它表明每个(可列出的)类型都定义了 ::(List) 运算符,这令人难以置信。操作数反转是如何实现的?我无法从源代码中弄清楚

class List[+A] extends AbstractSeq[A]
  def ::[B >: A] (x: B): List[B] =
    new scala.collection.immutable.::(x, this)

好像::(val head, val tail)也代表类型名。但无论如何它都不符合 head :: tail 模式。

任何在右侧带有 : 的运算符都会翻转其操作数。还有其他运营商也在使用它(尽管我想不出任何例子)。