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,所以我不知道这与它有什么关系。
你打电话的方法可能是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
感谢您的回复。我完全无法控制PmdMain函数。有很多例子使用这个确切的线条,只有在Play 2.4上试用它而不是Play 2.2,我觉得这对我来说是一个问题。我不知道为什么会发生这种情况。 – KdgDev
什么问题了吗?你已经拥有了什么?你瞄准什么? –
我试图建立一个字符串数组传递给CheckStyle构造函数,就像你在命令行上一样。它是链接中显示的代码。 – KdgDev