- バックアップ一覧
- 現在との差分 を表示
- ソース を表示
- バックアップ を表示
- PHP/言語仕様/クロージャを使ったイテレータの実装 へ行く。
- 1 (2012-01-23 (月) 20:22:55)
- 2 (2012-01-23 (月) 20:22:55)
- 追加された行はこの色です。
- 削除された行はこの色です。
* クロージャを使ったイテレータの実装 [#r7b384f1] <?php function getIterator($vars) { $i = 0; $n = sizeof($vars); return function ($func) use ($vars, &$i, $n) { if ($i < $n) { return $func($vars[$i++]); } return false; }; } $it = getIterator(array(1,2,3,4,5)); while (1) { $v = $it(function ($v) { return $v * 10; }); while ($v = $it(function ($v) { return $v * 10; })) { if ($v === false) break; print "$v\n"; } 10 20 30 40 50 $itをwhile($it)に置ければいいのにね。