@adil16

Как работает генератор?

Возьмем кусок кода, который выводит нам числа 2 - 4 - 6 - 8 - 10 - 12 -
function doubleArray ($arr, $callback) {
 	foreach ($arr as $v) yield $callback ($v);
 }
$arr = [1,2,3,4,5,6];
$gener = doubleArray($arr, function($x) {return $x *2;});

foreach ($gener as $v) echo "$v - ";


Как он отрабатывает? В функцию function doubleArray передается массив $arr = [1,2,3,4,5,6];, массив с помощью foreach разбивается на значения? Что происходит дальше? что делает yield $callback ($v);? он вызывает функцию $callback и возвращает туда значения массива $arr?
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
@Vitsliputsli
doubleArray ($arr, $callback):
В $arr передали массив [1,2,3,4,5,6]
В $callback передали функцию function($x) {return $x *2;}

Далее в doubleArray работает foreach
foreach ($arr as $v) {
yield $callback ($v);
}
Т.е. для каждого значения из [1,2,3,4,5,6] запускается функция $x *2.
Если заменить yield на return, то получится обычная функция, она возьмет первое значение массива, умножит его на 2 и вернет его, при повторном вызове тоже самое. Но у нас генератор, yield поступит также сначала, но при повторном вызове функции он начнет не сначала, а продолжит с того места, где остановился.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rPman
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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