Sto scrivendo una funzione che riceve diversi valori opzionali String
e converte ciascuno sia ad un Int
o Boolean
e poi passa i valori convertiti Unit
funzioni per l'ulteriore elaborazione. Se una conversione fallisce, l'intera funzione dovrebbe fallire con un errore. Se tutte le conversioni hanno esito positivo, la funzione deve elaborare i valori convertiti e restituire un successo.Conversione valori opzionali multipli in Scala
Qui è la funzione che ho scritto (semplificato dal reale):
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()
}
}
Anche se questa soluzione probabilmente funzionerà, è molto imbarazzante. Come posso migliorarlo?
per la lavorazione, i codici potenzialmente migliorabili credo un posto migliore è http://codereview.stackexchange.com/ Nel caso in cui non funzioni, potresti spiegare qual è il problema secondo te? –
@ GáborBakos Questa è una domanda abbastanza specifica su quello che sembra essere un metodo mancante. Penso che vada bene qui. –
Nel caso in cui non sia ovvio, sto scrivendo un controller per un'applicazione Play. Ci sono (attualmente) 3 parametri di query opzionali che devo elaborare. Preferirei farli tutti in un'unica chiamata poiché sono correlati. – Ralph