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.

Другие вопросы по тегам