List有两个方法被指定将一个元素预先添加到一个(不可变的)列表中: +:实施Seq.+:和 :: :(仅在List定义) +:技术上具有更一般的types签名 – def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That def ::[B >: A](x: B): List[B] – 但是忽略隐含的,根据文档消息只要求List[B] ,签名是等价的。 List.+:和List.:: ?有什么区别? 如果它们实际上是相同的,那么我认为+:会避免依赖具体的实现List 。 但为什么又定义了另一个公共方法,客户端代码何时会调用它? 编辑 还有一个::模式匹配提取器,但我想知道这些特定的方法。 另请参见: Scala列表连接,::: vs ++