2015-06-21 68 views
0

无法看到Scala列表的::+:方法之间的实际区别。Scala列表方法`::`vs`+:`

我用REPL来测试,看不到结果的差异。

任何人都可以给我如何正确使用它?

+0

::没有为Seq定义,只为列表 – harshtuna

+0

谢谢。改性。 – ttt

+0

另请参阅http://stackoverflow.com/questions/30959597/why-can-i-use-operator-with-seq-in-pattern-matching-but-not-elsewhere – AmigoNico

回答

5

查看List的代码,+:使用::(cons)运算符进行预先计算。

override def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That = bf match { 
    case _: List.GenericCanBuildFrom[_] => (elem :: this).asInstanceOf[That] 
    case _ => super.+:(elem)(bf) 
} 

一般而言,+:SeqLike定义和实施SeqLike任何集合可以使用相同的。

另一方面::List中定义,只能使用List

+0

因此,对于列表,我可以同时使用+:和::?互换? – ttt

+0

是的,你可以做到这一点。 – 757071