gpt4 book ai didi

scala - 在 Scala 中转换多个 optional 值

转载 作者:行者123 更新时间:2023-12-03 17:43:26 24 4
gpt4 key购买 nike

我正在编写一个接收几个 optional 函数 String值并将每个值转换为 IntBoolean然后将转换后的值传递给 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com