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

标签 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 会报错告诉您它丢失了。

关于scala - 为什么 List[Int].apply(1,2,3) 在 Scala 中出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11891872/

相关文章:

scala - 可遍历 => Java 迭代器

mysql - 使用另一个表值更新表

scala - 使用 Scala 将文件从本地移动到 HDFS 时出错

json - 如何在 Play 中读取带有转义引号的 JSON 字符串

scala - 如何在带有循环的spark中创建when表达式

scala - 关于具体化的问题

scala - 预置 Scala 向量的复杂性

scala - 如何在scala中默认使用不可变的Seq?

regex - 斯卡拉正则表达式。奇怪的正则表达式

java - 来自 Java 代码的嵌套 Scala 单例