Извращаюсь с новой игрушкой

$a = function () {for ($i = 0; $i < 10; $i++) yield $i;}; foreach ($a() as $i) echo $i; // 0123456789

Жаль, что не работает foreach ($a as $i) echo $i;, тогда можно было бы написать короче

foreach(function () {for ($i = 0; $i < 10; $i++) yield $i;} as $i) echo $i;

Или будь PHP похож на одного из своих предков, можно было бы

foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})() as $i) echo $i;

Даже извращения не работают типа

foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})->__invoke() as $i) echo $i;

Если кто не догнал, я пытаюсь сделать вот это:

(0..9).each { |i| print i }

2 thoughts on “PHP 5.5 yield

  1. Не так няшно, конечно, но в простом случае пойдет и так (даже для старого PHP):

    array_walk(range(0,9), function($el) { echo $el; });

    1. может нам по-быстрому нужен будет какой-нибудь ленивый генератор. array_walk с ним не покатит. да и вообще array_walk по идее не прервать без напрягов из коллбэка

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.