Po części zastosowałeś add
. Jest to związane z currying.
W niektórych językach obsługujących częściową aplikację funkcje są domyślnie wybierane. możesz napisać kod taki jak:
increment = add(1)
println(increment(2))
# => 3
Funkcja curry pozwala na częściowe zastosowanie tej funkcji bezpośrednio. Java nie obsługuje tego rodzaju rzeczy bez dodatkowych mechanizmów.
EDIT:
W Javie 8, z lambdas i java.util.function
można zdefiniować funkcję curry.
import java.util.function.Function;
public class Example {
public static <T, U, R> Function<T, Function<U, R>> curry(BiFunction<T, U, R> f) {
return t -> u -> f.apply(t, u);
}
public static int add(int x, int y) {
return x + y;
}
public static void main(String[] args) {
Function<Integer, Function<Integer, Integer>> curriedAdd = curry(Example::add);
// or
// BiFunction<Integer, Integer, Integer> add = (x, y) -> x + y;
// curriedAdd = curry(add);
Function<Integer, Integer> increment = curriedAdd.apply(1);
System.out.println(increment.apply(4));
}
}
EDYCJA # 2: Myliłem się! Poprawiłem/zmodyfikowałem swoją odpowiedź. Jak zauważył sepp2k, jest to tylko aplikacja częściowa. Te dwa pojęcia są powiązane i często mylone. W mojej obronie znajduje się sekcja na stronie currying Wikipedia o mixupie.
Nie miałem pojęcia, czym jest curry, więc musiałem to sprawdzić. Pomyślałem, że podzielę się artykułem z Wikipedii na temat [Currying] (http://en.wikipedia.org/wiki/Currying) – Ascalonian
Podobne posty: [Czy obsługa java obsługuje Currying?] (Http://stackoverflow.com/questions/6134278/ does-java-support-currying) – Ascalonian