Вы частично применили add
. Это связано с каррированием.
На некоторых языках, поддерживающих частичное приложение, функции по умолчанию заданы. вы, возможно, сможете написать код:
increment = add(1)
println(increment(2))
# => 3
Функция curries позволяет частично применить эту функцию непосредственно. Java не поддерживает такие вещи без дополнительных механизмов.
EDIT:
В Java 8, с лямбды и java.util.function
, вы можете определить функцию Карри.
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));
}
}
EDIT # 2: я был неправ! Я исправил/изменил свой ответ. Как указывал sepp2k, это только приложение с частичной функцией. Эти две концепции связаны и часто путают. В моей защите есть раздел на странице Википедии о смешении.
Я понятия не имел, что такое каррирование, поэтому мне пришлось посмотреть его. Думал, что поделился бы статьей Википедии о [Currying] (http://en.wikipedia.org/wiki/Currying) – Ascalonian
Похожие сообщения: [Поддерживает ли java Currying?] (Http://stackoverflow.com/questions/6134278/ do-java-support-currying) – Ascalonian