我是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
的末尾
答案 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)。)