残念ながら、Hack ラムダ式はこれをサポートしていません。ただし、PHP 5.3 クロージャー構文に頼ることはできます。
function allTrue(Map<string, bool> $map): bool {
$valid = 1;
$map->map(function ($a) use (&$valid) {
$valid &= $a;
});
return $valid === 1;
}
$map = Map{'foo' => true, 'bar' => false };
var_dump(allTrue($map)); // false
これが機能する理由: ラムダ式の構文と PHP 5.3 のクロージャー構文で作成されたタイプ Closure のオブジェクトは交換可能です。
ドキュメントから
注:
現在、作業中または検討中のラムダ式にはいくつかの制限があります。
ラムダ式は、参照による変数のキャプチャをサポートしていません。プログラマーが参照によって変数を取得したい場合は、PHP 5.3 クロージャー構文を使用し、「use(..)」リスト内の変数の前に「&」を配置する必要があります。
現在、ラムダ式は参照による戻りをサポートしていませんが、将来サポートが追加される可能性があります。