Dire che ho una classe con più parametri:
case class Foo(a: String, b: String, c: String, d: String, ... )
Ora dì che voglio analizzare un'istanza di Foo
da Map[String, String]
:
// returns either the parsed Foo as Right, or error message as Left
// example: Map("a" -> "1", "b" -> "2" ... ) returns Foo("1", "2", ... )
def parse(fromMap: Map[String, String]): Either[String, Foo]
I nomi delle chiavi sono irrilevanti; questo non è un tipo di domanda di riflessione.
La mia implementazione è simile a questa:
fromMap.get("a") match {
case None => Left("couldn't find a")
case Some(a) => fromMap.get("b") match {
...
case Some(last) => Right(Foo(a, ... , last))
}
}
Ma quando ci sono molti parametri, il rientro è troppo estremo e questo rende difficile capire la logica del metodo (potrebbe essere un po 'più complesso di una semplice ricerca di mappe).
Riesci a pensare a un codice più leggibile per tale caso d'uso?