我试图在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,所以我不知道这与它有什么关系。
答案 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