0

我正在尝试在 Play 2.4 中制作一个 Build.scala 文件。对于 Checkstyle 部分,我查看了它的实现方式并发现了这一点:

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

但我收到一条错误消息:

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

找到:[B>:字符串}数组[B]]

必需:字符串

PmdMain(args.toArray)

我在这里查看了答案:在 Scala 中,为什么我会得到这个“多态表达式无法实例化为预期类型”?

但这实际上对我没有帮助。中的所有点List都是 type String,所以我看不出这个错误是如何产生的。

谁能解释发生了什么?

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

4

1 回答 1

0

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

PmdMain(arg1, arg2, arg3)

请注意这PmdMain(List(arg1, arg2, arg3))与前者有多个 type 参数String,而后者有一个 type 参数List[String]。您遇到的错误表明列表中的第一个参数应该是 a String,但您提供了一个Array[String].

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

PmdMain(args: _*)

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

如果你想在 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
于 2015-06-27T19:25:55.367 回答