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
模式。
任何在右侧带有 :
的运算符都会翻转其操作数。还有其他运营商也在使用它(尽管我想不出任何例子)。
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
模式。
任何在右侧带有 :
的运算符都会翻转其操作数。还有其他运营商也在使用它(尽管我想不出任何例子)。