2017-09-14 57 views
2

新手到Scala,即时通讯寻找处理收藏混淆的象征符号。要将项目追加到列表或向量我可以使用:Prepend to vector scala

List(1, 2, 3) :+ 4 

我理解是本方法

List(1, 2, 3).:+(4) 

的缀形式如果我想预先考虑到一个列表,我可以使用

List(1, 2, 3).+:(4) 

然而,缀形式给我一个编译错误

List(1,2,3) +: 4 
Error:(121, 16) value +: is not a member of Int 
Vector(1,2,4) +: 4 
      ^

有人可以告诉我

回答

3

在Scala中,方法终止于结肠:和缀符号使用时是右结合,这意味着该方法存在于右手侧的元件上。您需要:

4 +: List(1,2,3) 

当使用List[T]与点符号,这不会发生,因为这是在列表中的显式调用。当使用中缀表示法时,编译器会执行附加语法desugaring。这:

List(1,2,3) +: 4 

变成

4.+:(List(1,2,3)) 

,但是没有找到一个+:Int,所以它抱怨。

+0

谢谢可以推荐上修改集合API和如何解释重载运算的基本知识一些资源,关于这一主题的斯卡拉文档是很稀疏 –

+0

@LukeDeFeo我会以https://docs.scala-lang .ORG /概述/收藏/ overview.html –