为什么List[Int].apply(1,2,3)在Scala中给出错误



我是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)

但是,当我执行以下操作时,我没有收到任何错误:

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)

为什么List[Int].apply()给我一个错误?

感谢您的帮助!

因为你的语法是错误的。 如果你想要等效的 List.apply(1,2,3) ,那么它应该是:

val tmp = List.apply[Int](1,2,3)

在表达式 List.apply(1,2,3) 中,List引用伴随对象,并且对象不能具有泛型。 因此,您必须将泛型放在方法上。

作为参考,您可以在List的源代码中看到以下内容:

object List extends SeqFactory[List] {
  ...
  override def apply[A](xs: A*): List[A] = xs.toList

当你写List[Int].apply(1,2,3)时,Scala将其解释为(List[Int]).apply(1,2,3)List[Int]被解释为好像没有括号List[Int](),这相当于List.apply[Int]. 由于apply需要一个参数,Scala 会给你一个错误,告诉你它丢失了。

相关内容

最新更新