为什么list :: element会出错?

时间:2012-05-19 16:48:11

标签: scala

我是scala的新手,只是在我的空闲时间玩弄它并遇到了这个问题:

如果我有这个清单:

 val list = List(1,2,3,4)

然后说:

 val newList = list :: 5
斯卡拉告诉我

 error: value :: is not a member of Int

但如果我说:

 val newList = list ::: List(5)
scala完全没问题。 为什么我不能将元素附加到List,但我可以将List的所有元素附加到List

的末尾

1 个答案:

答案 0 :(得分:7)

你的语法倒退了:

5 :: list

这会将元素5添加到list的前面。

在Scala中,以冒号(:)结尾的运算符是右关联的。因此,5 :: list会调用::上的list方法并提供参数5

list ::: List(5)的作用原因是它实际上将list放在List(5)的前面。

顺便说一句,List也分别为prepend和append设置了运算符+::+。 (但请记住,前缀List为O(1),而附加为O(n)。)