A függvények egy fontos jellemzője, hogy a visszatérési értékük típusa megváltozhat. Nézzünk erre két példát. Az első:
function test(){
[int[]] $mx = 1,2
write-host "Belül:" $mx.gettype().FullName
$mx
}
$mx1 = test
write-host "Kívül:", $mx1.gettype().FullName
A test függvényben létrehoztam egy egyszerű egészekből álló tömböt, amit visszatérési értékként visszaadok. Mind a függvényen belül, mind kívül kiírom az adat típusát. Ha ezt lefuttatom, akkor a következő eredményeket kapom:
Belül: System.Int32[]
Kívül: System.Object[]
Látható, hogy az eredeti Int32[]-ből Object[]-é alakult a visszatérési érték. Ez talán nem okoz olyan gyakran problémát, de ha többdimenziós tömböket akarunk visszaadni, akkor már jóval rizikósabb a dolog:
function test(){
$mx = New-Object 'int[,]' 10,20
write-host "Belül:" $mx.gettype().FullName
$mx
}
$mx1 = test
write-host "Kívül:", $mx1.gettype().FullName
Ennek eredménye:
Belül: System.Int32[,]
Kívül: System.Object[]
Azaz a kétdimenziós egész-tömbből egydimenziós objektumtömb lett. Hogyan lehet elérni, hogy ezek a típuskonverziók ne következzenek be? Használjunk egy régről ismert trükköt, a vessző használatát:
function test(){
$mx = New-Object 'int[,]' 10,20
write-host "Belül:" $mx.gettype().FullName
,$mx
}
$mx1 = test
write-host "Kívül:", $mx1.gettype().FullName
A test függvény utolsó sorában a ,$mx megoldja a problémát:
Belül: System.Int32[,]
Kívül: System.Int32[,]
Ugyanígy az első példafüggvényt is ez a trükk meggyógyítja.