scala List .toArray没有明显原因失败

时间:2015-06-27 19:04:30

标签: scala sbt playframework-2.4

我试图在Play 2.4中制作Build.scala文件。对于Checkstyle部分,我查看了它是如何实现的,并找到了:

https://github.com/ymasory/sbt-example-qa/blob/master/project/build.scala

但我收到的错误是:

  

多态表达式无法实例化为预期类型;

     

发现:[B>:String}数组[B]]

     

必需:字符串

     

PmdMain(args.toArray)

我在这里看了答案:In Scala, why do I get this "polymorphic expression cannot be instantiated to expected type"?

但这并没有真正帮助我。 List中的所有点都属于String类型,因此我不知道这个错误是如何产生的。

有人可以解释发生了什么吗?

Play 2.4使用sbt 0.13.8,2.2使用0.13.0,据我所知。我不是真的关注SBT或Scala,所以我不知道这与它有什么关系。

1 个答案:

答案 0 :(得分:0)

您调用的方法可能是variadic function。换句话说,它期望可变数量的参数。这些参数在Scala中称为重复参数,通常称为 varags 。例如,您可以致电:

PmdMain(arg1, arg2, arg3)

注意这与PmdMain(List(arg1, arg2, arg3))的不同之处 - 前者有多个类型为String的参数,后者有一个类型为List[String]的参数。您遇到的错误表示列表中的第一个参数应为String,但您提供了Array[String]

如果要使用实例化的参数列表调用该方法,则必须使用特殊的序列参数表示法:

PmdMain(args: _*)

您可以在规范中阅读有关重复参数和序列参数here的更多信息。

如果您想在REPL中使用它,可以非常简单地重新创建错误:

def foo(args: String*) = ??? //The * indicates that args is variadic
foo("bar", "baz") //OK
foo(List("foo", "baz")) //Bad
foo(List("foo", "baz"):_*) //OK