我试图添加元素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)
为什么省略括号导致编译错误?这些任务看起来和我一样.有什么不同?
这是因为正确的联想方法.
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)
上面的案例工作原因是它的正常方法调用.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |