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

St.*_*rio 1 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
}
Run Code Online (Sandbox Code Playgroud)

DEMO

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

pam*_*amu 6

这是因为正确的联想方法.

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

scala> "efg" +: l
res3: List[String] = List(efg, abc)
Run Code Online (Sandbox Code Playgroud)

阅读更多内容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
     ^
Run Code Online (Sandbox Code Playgroud)

因为+:是正确的联想.方法+:是在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)
Run Code Online (Sandbox Code Playgroud)

上面的案例工作原因是它的正常方法调用.