- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- PHP/言語仕様/クロージャを使ったイテレータの実装 へ行く。
- 1 (2012-01-23 (月) 20:22:55)
- 2 (2012-01-23 (月) 20:22:55)
クロージャを使ったイテレータの実装
<?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; }); if ($v === false) break; print "$v\n"; }
10 20 30 40 50
$itをwhile($it)に置ければいいのにね。