Задать вопрос
SerafimArts
@SerafimArts
Senior Notepad Reader

Как бы назвать аргументы для метода?

Есть обычный метод map для работы над итераторами (вместо массивов):
public static function map(iterable $iterator, ?callable $forward, callable $backward = null): \Generator
//                                                       ↑ ↑ ↑ ↑           ↑ ↑ ↑ ↑ ↑
//                                                              Here be dragons
{
    $generator = self::toGenerator($iterator);

    while ($generator->valid()) {
        [$key, $value] = [$generator->key(), $generator->current()];

        $response = yield $key => $forward === null ? $value : $forward($value, $key);

        $generator->send($backward === null ? $response : $backward($response));
    }
}


Не могу придумать названия аргументов для "маппера" ответа (возвращаемого значения) и "обратной связи" (когда возвращается контроль управления обратно в исходную точку) сопрограммы. Пока назвал forward и backward, но, кажется, что-то тут не так. Мб есть какие-то другие идеи или может существует термин, который обозначает прямой и обратный ответы сопрограмм?

P.S. Добавлю пример использования:
function example1() {
    echo yield 23; // echo 42 (возврат управления с применением второго аргумента)
}

function example2(\Generator $it) {
    echo $response = $i->current(); // $response = 46 (применяется первый аргумент)
    $i->send($response);
}


// Соединение двух функций через map

$cb1 = function(int $arg): int {
    return $arg * 2; // Функция прямого маппера
};

$cb2 = function(int $response): int {
    return $response - 4; // Функция обратного маппера
};

example2(...::map(example(), $cb1, $cb2));


А вообще было бы прикольно знать терминологию, если она существует, для первого и второго куска сопрограммы. На её основе можно будет уже назвать аргументы.
  • Вопрос задан
  • 105 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Несомненно это тот вопрос которого заслуживает тостер, работа стоит из-за этой важной задачи.

Не понял функционального предназначения этого, отдалённо напоминает промисы и соответственно resolve/reject/onFulfilled/onRejected
https://learn.javascript.ru/promise
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы