首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么List[Int].apply(1,2,3)在Scala中出现错误?

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

Stack Overflow用户
提问于 2012-08-10 05:00:16
回答 1查看 244关注 0票数 2

我是Scala的新手,来自python,正在尝试理解一些语法和约定。我很好奇为什么下面的方法不起作用:

代码语言:javascript
复制
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)

然而,当我执行以下操作时,我没有得到任何错误:

代码语言:javascript
复制
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()会给我一个错误?

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-10 05:02:11

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

代码语言:javascript
复制
val tmp = List.apply[Int](1,2,3)

在expression List.apply(1,2,3)中,List引用的是伴生对象,对象不能有泛型。因此,您必须将泛型放在方法上。

作为参考,可以在List的源代码中看到这一点

代码语言:javascript
复制
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会给你一个错误,告诉你缺少参数。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11891872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档