我正在尝试使用Scala的PlayFramework,并且遇到了build.sbt文件的问题。具体做法是:
Pattern matching in val statements is not supported
这是显而易见的:
val env = sys.props.getOrElse("ENV", default = "local")
val (someVal, otherVal) = env match {
case "local" => ("x","a")
case _ => //etc
}
有没有办法在build.sbt文件中使用匹配语句?该错误表明它在val语句中不受支持。它实际上在哪里支持?
编辑:
我也尝试过将一个方法添加到build.scala对象中,但即使我使用plain if语句,我仍然会得到相同的&#34;不支持val语句中的模式匹配&#34; < / p>
Build.scala:
import sbt._
import Keys._
object ExampleBuild extends Build {
def getEnvData(env: String) = {
if(env == "local") {
("c","q")
} else if (env == "other") {
("b","v")
} else {
("x","a")
}
}
}
并更新了build.sbt:
val env = sys.props.getOrElse("ENV", default = "local")
val (someVar, otherVar) = ExampleBuild.getEnvData(env)
但无济于事。
答案 0 :(得分:3)
错误不是由match
语句引起的,而是由此引起的:
val (someVar, otherVar) = ...
这是sbt不支持的模式匹配形式(在元组上)。
的相关评论//检查否val(a,b)= foo 或 val a,b = foo,因为这些对于范围位置和整个架构都有问题。
您可以使用案例类而不是元组来解决此限制。
<{1}} 中的Build.scala
<{1}} case class EnvData(someVar: String, otherVar: String)
然后像build.sbt
,val envData = env match {
case "local" => EnvData("x", "a")
case _ => //etc
}
一样使用它等等。