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

问题描述:

我试图在Play 2.4中创建一个Build.scala文件。对于Checkstyle的一部分,我看了一下它是如何实现的,发现这个:scala List .toArray没有明显原因失败

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

但我发现了一个错误,指出:

多态性表达不能被实例化预期类型;

实测值:[B>:字符串数组} [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

我试图建立一个字符串数组传递给CheckStyle构造函数,就像你在命令行上一样。它是链接中显示的代码。 – KdgDev

你打电话的方法可能是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 
+0

感谢您的回复。我完全无法控制PmdMain函数。有很多例子使用这个确切的线条,只有在Play 2.4上试用它而不是Play 2.2,我觉得这对我来说是一个问题。我不知道为什么会发生这种情况。 – KdgDev