我是Scala的新手,来自python并试图围绕一些语法和约定.我很好奇为什么以下不起作用:
scala> val tmp = List[Int].apply(1,2,3)
<console>:7: error: missing arguments for method apply in object List;
follow this method with `_' if you want to treat it as a partially applied function
val tmp = List[Int].apply(1,2,3)
Run Code Online (Sandbox Code Playgroud)
然而,当我执行以下操作时,我没有收到任何错误:
scala> val tmp = List.apply(1,2,3)
tmp: List[Int] = List(1,2,3)
scala> val tmp = List[Int](1,2,3)
tmp: List[Int] = List(1,2,3)
Run Code Online (Sandbox Code Playgroud)
为什么List[Int].apply()给我一个错误?
谢谢你的帮助!
dhg*_*dhg 12
因为你的语法错了.如果你想要相当于List.apply(1,2,3),那么它应该是:
val tmp = List.apply[Int](1,2,3)
Run Code Online (Sandbox Code Playgroud)
在表达式中List.apply(1,2,3),List引用了伴随对象,并且对象不能具有泛型.因此,您必须将泛型放在方法上.
作为参考,您可以在源代码中看到List:
object List extends SeqFactory[List] {
...
override def apply[A](xs: A*): List[A] = xs.toList
Run Code Online (Sandbox Code Playgroud)
当你写作时List[Int].apply(1,2,3),Scala将其解释为(List[Int]).apply(1,2,3).而List[Int]就好像它是解释List[Int]()没有括号,这相当于List.apply[Int].由于apply需要参数,Scala会向您发出错误消息,告诉您它已丢失.
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |