コールバックを用いるメソッドで、コールバック内で先頭要素や末尾要素に応じた処理をしたい場合、クロージャ―のuse
を使う。ただしこの方法は、全要素に対して先頭・末尾などの判定処理が行われる。
以下の例ではコレクションの要素を並べた1つの文字列を返すが、文字列の最初に'('
、最後に')'
を付加し、要素間には','
を置いている。
1 2 3 4 5 6 7 8 |
>>> $c->reduce(function($carry, $element) use($c) { ... return ... ($element == $c->first() ? '(' : '') . ... $carry . ... $element . ($element == $c->last() ? ')' : ', '); ... }, '') => "(A, B, C, D, E)" > |
要点は以下のとおり。
- クロージャ―の
use
で呼び出し元のコレクションインスタンスを指定 - クロージャ―内でコレクションインスタンスの先頭要素/末尾要素に等しいかどうかを判定し、それらに応じた処理を実行
1 2 3 4 5 6 |
$c->reduce(function($carry, $element) use($c) { return ($element == $c->first() ? '(' : '') . $carry . $element . ($element == $c->last() ? ')' : ', '); }, '') |