我试图将元素添加到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
}
为什么省略括号导致编译错误?这些任务看起来和我一样。有什么区别?
答案 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)
以上情况有效,因为它的正常方法调用。