Continuo a esaminare record estensibili come in Passing a Shapeless Extensible Record to a Function (continued): la soluzione fornita funziona con funzioni che prendono tutti un parametro che include almeno foo1, foo2 e foo3; si può scrivere:Passare un record estendibile informe a una funzione (storia infinita?
fun1(("foo1" ->> "hello") :: ("foo2" ->> 1) :: ("foo3" ->> 1.2) :: HNil)
fun1(("foo1" ->> "hello") :: ("foo2" ->> 1) :: ("foo3" ->> 1.2) :: ("foo4" ->> true) :: HNil)
e così via
e se siamo in grado di aggiungere una seconda funzione fun2:
def fun2[L <: HList : HasMyFields](xs: L) = {
val selectors = implicitly[HasMyFields[L]]
import selectors._
xs("foo1").length + xs("foo2") + xs("foo3")
}
Fin qui, tutto bene.
Ora, supponiamo di avere un set di campi foo1, foo2, ... E un set di funzioni fun1, fun2, che prendono come parametro un record composto con qualsiasi sottoinsieme di {foo1, foo2, ...} . Ad esempio, fun1 potrebbe prendere come parametro un record che contiene foo1 e foo3 ma non necessariamente foo2, fun2 si aspetta un record con almeno foo4 e così via.
C'è un modo per evitare di dichiarare tutte le classi come HasMyFields in quanto sono possibili combinazioni (se abbiamo n campi, ci sono 2 ** n combinazioni!)?
sei infinitamente inestimabile! Molte grazie! – bhericher