Почему php возвращает пустой генератор, если функция содержит и return, и yield? - PullRequest
2 голосов
/ 09 марта 2020
// Returns empty generator as expected.
function yieldOnly(): Generator
{
    yield;
}

// Throws TypeError as expected.
function returnOnly(): Generator
{
    return;
}

// Returns empty generator???
function returnAndYield(): Generator
{
    return;
    yield;
}

Возвращаемое значение returnAndYield() - это пустое Generator, хотя я ожидал, что оно выдаст TypeError. Это ожидаемое поведение? Я нигде не смог найти документально подтвержденный документ, и мне интересно, не является ли это ошибкой, о которой следует сообщать.

1 Ответ

3 голосов
/ 10 марта 2020

В руководстве по синтаксису генератора говорится следующее:

Любая функция, содержащая yield, является функцией генератора.

Итак, наличие ключевого слова yield приводит к наличию функции генератора. С ключевым словом return вы выходите из функции, которая используется для создания функции генератора. В этом случае он просто пустой, потому что до оператора return нет строк yield. При использовании следующего исходного кода:

function returnAndYield(): Generator
{
    yield 1;
    yield 2;
    return;
    yield 3;
    yield 4;
}

$result = returnAndYield();
echo implode(',', iterator_to_array($result));

вы получите следующий вывод:

1,2

Значения 3 и 4 не находятся в генераторе, поскольку функция выход до этих yield операторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...