Ich möchte eine Klasse in Java 8 erstellen, die in der Lage ist, ein Objekt rekursiv erstellen, die eine Funktion hat, die einen Funktionsparameter basierend auf den Parametern ich hinzugefügt.Collect Argumente für Curry-Funktionen in Java/Scala
Zum Beispiel würde Ich mag Lage sein, dies zu tun:
new X().param(23).param("some String").param(someObject)
.apply((Integer a) -> (String b) -> (Object c) -> f(a,b,c))
Verfahren anwenden würde dann die gesammelten Parameter an die gegebene Funktion anwenden.
Ich denke, dass dies möglich sein sollte, ohne zu reflektieren, während die Art-Sicherheit beibehalten wird, aber ich kann nicht recht herausfinden, wie. Eine Lösung in Scala ist ebenfalls willkommen, wenn ich sie in Java 8 übersetzen kann. Wenn es nicht möglich ist, werde ich auch eine Antwort akzeptieren, die erklärt, warum.
Was ich habe, so weit ist im Wesentlichen diese:
class ParamCmd<A,X> {
final A param;
public ParamCmd(A param) {
this.param = param;
}
public<B> ParamCmd<B, Function<A,X>> param(B b) {
return new ParamCmd<>(b);
}
public void apply(Function<A,X> f) {
// this part is unclear to me
}
public static void main(String[] args) {
new ParamCmd<Integer,String>(0).param("oops").param(new Object())
// the constructed function parameters are reversed relative to declaration
.apply((Object c) -> (String b) -> (Integer a) ->
"args were " + a + " " + b + " " + c
);
}
}
Wie in den Code-Kommentaren erwähnt, meine Probleme halten die Funktionsparameter in der Reihenfolge der Anrufe von param() und die Anwendung tatsächlich die Parameter .
Es scheint, Sie brauchen Applicative. – pedrofurla