クロージャを使ったイテレータの実装

 <?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)に置ければいいのにね。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS