Я пишу функцию, которая принимает несколько дополнительных String
значений и преобразует каждый из них, чтобы либо Int
или Boolean
, а затем передают преобразованные значения Unit
функций для дальнейшей обработки. Если какое-либо преобразование не выполняется, вся функция должна завершиться ошибкой. Если все преобразования успешны, функция должна обрабатывать преобразованные значения и возвращать успех.преобразование несколько дополнительных значений в Scala
Вот функция, я написал (упрощенно от фактической):
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()
}
}
Хотя это решение вероятно, будет работать, это очень неудобно. Как я могу улучшить его?
для работающих, потенциально улучшающихся кодов я думаю, лучше место http://codereview.stackexchange.com/ Если это не сработает, не могли бы вы объяснить, в чем проблема, на ваш взгляд? –
@ GáborBakos Это довольно конкретный вопрос о том, что кажется недостающим методом. Я думаю, что здесь хорошо. –
В случае, если это не очевидно, я пишу контроллер для приложения Play. Есть (в настоящее время) 3 необязательных параметра запроса, которые мне нужно обработать. Я предпочел бы сделать их всех одним звонком, так как они связаны. – Ralph