ActionScript 3: Как работают функции карри?
Я только недавно начал смотреть на код ActionScript (например, я буквально только что узнал, что ActionScript был вчера). Мой единственный опыт связан с Java, поэтому я понятия не имею, как работает этот код:
public static function curry(func:Function,...args):Function
{
return function (...args2):*{
return func.apply(null,args.concat(args2));
};
}
Я не понимаю, что делает звездочка, откуда... откуда взялась args2 (или что это такое), или как вы можете иметь оператор return в операторе return. Каким будет эквивалентный Java-код? (Даже если это довольно запутанно, я, вероятно, смог бы понять это намного лучше.)
1 ответ
ActionScript имеет много общего с JavaScript, но также предоставляет систему статических типов, которая используется в Java. В Java отсутствует поддержка функций высшего порядка. Функции, которые принимают функции в качестве аргументов или возвращают функции или и то, и другое.
curry
принимает и аргументы типа Function
и произвольное количество дополнительных аргументов (...
параметр покоя). Возвращает Function
который также принимает произвольное количество аргументов. Когда эта функция вызывается, все аргументы объединяются и применяются к исходной функции.
// pseudo code
const f:Function = curry(function(o):* { o.join(', '); }, 1, 2, 3);
const result:* = f(4, 5, 6);
trace(result); // [1, 2, 3, 4, 5, 6]
В Java будут использоваться внутренние классы или лямбда-выражения вводятся в Java 8.