在向List添加元素时省略括号

时间:2018-02-27 09:59:42

标签: scala list

我试图将元素添加到List[String],同时省略恼人的括号。我试过这个:

object Main extends App {
    val l = List("fds")
    val xs1: List[String] = l.+:("123")  // ok
    val xs2: List[String] = l +: "123"   // compile-error
}

DEMO

为什么省略括号导致编译错误?这些任务看起来和我一样。有什么区别?

1 个答案:

答案 0 :(得分:6)

由于正确的联想方法,它正在发生。

scala> val l = List("abc")
l: List[String] = List(abc)

scala> "efg" +: l
res3: List[String] = List(efg, abc)

在此处阅读更多What good are right-associative methods in Scala?

错误案例

scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)


scala> 4 +: l 
res1: List[Int] = List(4, 1, 2, 3)

scala> l +: 1
<console>:13: error: value +: is not a member of Int
       l +: 1
     ^

因为+:是正确关联的。方法+:在Int而不是list

上被调用

为了使其工作,我们可以在没有特殊运算符语法的情况下显式调用列表上的方法

scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> l.+:(1)
res4: List[Int] = List(1, 1, 2, 3)

以上情况有效,因为它的正常方法调用。