@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?
  • Вопрос задан
  • 68 просмотров
Решения вопроса 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 поступит также сначала, но при повторном вызове функции он начнет не сначала, а продолжит с того места, где остановился.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 40 000 до 60 000 ₽
LAPTOP.RU Москва
от 130 000 до 170 000 ₽
LAPTOP.RU Кострома
от 25 000 до 65 000 ₽
28 февр. 2021, в 01:35
200000 руб./за проект
28 февр. 2021, в 00:22
2500 руб./за проект
27 февр. 2021, в 22:14
30000 руб./за проект