今日の謎
昨日書いた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