昨日書いたInjectでMapしようとしたんですが。
PS C:\> Inject 1,2,3 @() { $args[0] += $args[1]*2; $args[0] }
12配列を渡したはずなのに、なぜかIntに変換されとる!どっかで暗黙の型変換が行なわれているっぽいなー、と思って型を出力するコードを追加。
PS C:\> Inject 1,2,3 @() { echo $args[0].GetType(); $args[0] += $args[1]*2; $args[0] }
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
True True Object[] System.Array
True True Object[] System.Array
2
4
6
PS C:\> Inject 1,2,3 @() { $args[0] += $args[1]*2; echo $args[0].GetType(); $args[0] }
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
True True Object[] System.Array
True True Object[] System.Array
2
4
6
なぜか期待通りの動作に!何が起きているんだ・・・。
追記 (2009-02-19)
↓これと同じノリなんだろうか?うーん、何がうれしいのか理解に苦しむ。
PS C:\> $a = 1,2,3,4,5 | where {$_ -lt 2}
PS C:\> $a.getType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
PS C:\> $a = 1,2,3,4,5 | where {$_ -gt 2}
PS C:\> $a.getType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array