Wie kann ich Shapeless verwenden, um eine über Arität abstrahierende Funktion zu erstellen?
Betrachten wir ein konkretes Beispiel. Ich habe viele Funktionen, die eine variable Anzahl von Argumenten annehmen und a zurückgebenSeq[T]
. Sagen:
def nonNeg(start: Int, count: Int): Seq[Int] =
Iterator.from(start).take(count).toSeq
Für jede dieser Funktionen muss eine "Java-Version" dieser Funktion erstellt werdenjava.util.List[T]
. Ich kann die "Java-Version" der obigen Funktion erstellen mit:
def javaNonNeg(start: Int, count: Int): java.util.List[Int] =
nonNeg(start, count).asJava
Dies ist etwas ausführlich, da die Liste der Parameter zweimal dupliziert wird. Stattdessen möchte ich eine übergeordnete Funktion erstellen, die als Parameter eine Funktion der Form von annimmtnonNeg
(eine beliebige Anzahl und Art von Argumenten gibt a zurückSeq[T]
) und gibt eine Funktion zurück, die dieselben Argumente verwendet, jedoch ajava.util.List[T]
. Angenommen, diese Funktion wurde aufgerufenmakeJava
Dann könnte ich schreiben:
def javaNonNeg = makeJava(nonNeg)
KannmakeJava
geschrieben werden mitFormlos Fähigkeit zuüber die Arität abstrahieren? Wenn ja, wie und warum und wie kann das noch getan werden?