我正在编写一个接收几个 optional 函数 String
值并将每个值转换为 Int
或 Boolean
然后将转换后的值传递给 Unit
进一步处理的功能。如果任何转换失败,整个函数都应该失败并显示错误。如果所有转换都成功,则该函数应处理转换后的值并返回成功。
这是我写的函数(从实际简化):
f(x: Option[String], y: Option[String], z: Option[String]): Result = {
val convertX = x.map(value => Try(value.toInt))
val convertY = y.map(value => Try(value.toBoolean))
val convertZ = z.map(value => Try(value.toBoolean))
val failuresExist =
List(convertX, convertY, convertZ).flatten.exists(_.isFailure)
if (failuresExist) BadRequest("Cannot convert input")
else {
convertX.foreach {
case Success(value) => processX(value)
case _ =>
}
convertY.foreach {
case Success(value) => processY(value)
case _ =>
}
convertZ.foreach {
case Success(value) => processZ(value)
case _ =>
}
Ok()
}
}
虽然这个解决方案可能会奏效,但它非常尴尬。我该如何改进?
最佳答案
如果你不介意的话,更命令式的风格也可以。
def f(x: Option[String], y: Option[String], z: Option[String]): Result = {
try {
val convertX = x.map(_.toInt)
val convertY = y.map(_.toBoolean)
val convertZ = z.map(_.toBoolean)
convertX.foreach(processX)
convertY.foreach(processY)
convertZ.foreach(processZ)
Ok()
} catch {
case _: IllegalArgumentException | _: NumberFormatException => BadRequest("Cannot convert input")
}
}
关于scala - 在 Scala 中转换多个 optional 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30325435/