匿名ジェネレータ
最近、匿名のジェネレータを作りたかったです.良いニュースは可能ですが、構文は最も明白なものではありません.
jQuery時代のJavaScriptから主に知られている「即時起動関数式」と呼ばれるテクニックを使用する必要があります.
はい、
匿名関数自体はジェネレータではなく、呼び出し可能であり、 この関数は、作成された直後に呼び出され、括弧で囲まれなければなりません 呼び出しが発生すると、ジェネレータは
ジェネレータを使用して、以下のコードを置き換えることができます.はい、2つのアイテムのためにそれは役に立たないかもしれません、しかし、そのような複数の抽出者のためにそれは意味をなします.特に最初の抽出物のみが99 %のケースで使用されることを知っているとき.
jQuery時代のJavaScriptから主に知られている「即時起動関数式」と呼ばれるテクニックを使用する必要があります.
はい、
$iterable = (function (): Generator {
yield 42; // yield any number of values
})();
解説(function(){ ... })()
我々がすぐにそれを起こしたいならば$func = function(): Generator { yield 42; };
$iterable = $func(); // this is when the generator is created
foreach($func as $item){ } // error, $foo is not iterable
foreach($iterable as $item){ } // iterates over the generator
ジェネレータは、PHP5.5
. 私はこれまでめったに使用しませんでした、しかし、彼らはいくつかのエッジケースを解決するのに良いです.ジェネレータを使用して、以下のコードを置き換えることができます.はい、2つのアイテムのためにそれは役に立たないかもしれません、しかし、そのような複数の抽出者のためにそれは意味をなします.特に最初の抽出物のみが99 %のケースで使用されることを知っているとき.
function getDefaultExtractors(
string $headerName,
string $cookieName
): iterable {
#< code here >#
return $extractors;
}
コードウィズif
sとarray push :$extractors = [];
if ($headerName !== null) {
$extractors[] = Make::headerExtractor($headerName);
}
if ($cookieName !== null) {
$extractors[] = Make::cookieExtractor($cookieName);
}
コードウィズarray_filter
とternaries :$extractors = array_filter([
$headerName !== null ? Make::headerExtractor($headerName) : null,
$cookieName !== null ? Make::cookieExtractor($cookieName) : null,
]);
ジェネレータを使用したコード$extractors = (function () use ($headerName, $cookieName): Generator {
$headerName !== null && yield Make::headerExtractor($headerName);
$cookieName !== null && yield Make::cookieExtractor($cookieName);
})(),
発電機の背後にある鍵となる考えは、実行が実際に各々の上で休止されるということですyield
ステートメントを実行します.生成された項目の全てが消費される前に反復が中断される場合、これはいくつかの計算リソースを節約する.Reference
この問題について(匿名ジェネレータ), 我々は、より多くの情報をここで見つけました https://dev.to/dakujem/anonymous-generator-in-php-4nn1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol