noise

計算機科学や各種設定のメモ

オブジェクトパイプラインでの配列(Collection)の受け渡し

問題

以下のコードを実行してみるとパイプラインを通ってきたオブジェクトの数が増えてしまっていることが分かります。(3個から6個に)

PS > function a([int]$i) { return @($i, ($i+1)) } ; 1..3 | %{ a $_ } | measure

Count    : 6

解決法

これを回避するためには関数内のreturn式で配列の前にカンマを書きます。

PS > function a([int]$i) { return ,@($i, ($i+1)) } ; 1..3 | %{ a $_ } | measure

Count    : 3

所感

PS > 1,1+1
1
1
1

となってしまうのはいかがなものだろうか? (1,1)+1 と解釈されて+演算子が配列への要素の追加になってしまっている。