有没有办法在 build.sbt 中使用模式匹配?
Is there a way to use pattern matching in build.sbt?
我正在尝试使用 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 对象添加一个方法,但即使我使用普通的 if 语句,我仍然得到相同的 "Pattern matching in val statements is not supported"
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)
但是没有用。
错误不是由match
语句引起的,而是来自于:
val (someVar, otherVar) = ...
这是 sbt 不支持的一种模式匹配形式(在元组上)。
的相关评论
// Check No val (a,b) = foo or val a,b = foo as these are problematic to range positions and the WHOLE architecture.
您可以通过使用大小写 class 而不是元组来解决此限制。
在Build.scala
case class EnvData(someVar: String, otherVar: String)
在build.sbt
val envData = env match {
case "local" => EnvData("x", "a")
case _ => //etc
}
然后像envData.someVar
、envData.otherVar
等那样使用。
我正在尝试使用 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 对象添加一个方法,但即使我使用普通的 if 语句,我仍然得到相同的 "Pattern matching in val statements is not supported"
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)
但是没有用。
错误不是由match
语句引起的,而是来自于:
val (someVar, otherVar) = ...
这是 sbt 不支持的一种模式匹配形式(在元组上)。
的相关评论// Check No val (a,b) = foo or val a,b = foo as these are problematic to range positions and the WHOLE architecture.
您可以通过使用大小写 class 而不是元组来解决此限制。
在Build.scala
case class EnvData(someVar: String, otherVar: String)
在build.sbt
val envData = env match {
case "local" => EnvData("x", "a")
case _ => //etc
}
然后像envData.someVar
、envData.otherVar
等那样使用。