Referenciális hivatkozás paraméterekre ([ref])

Előfordulhat olyan igény, hogy a függvényemmel nem új értékeket akarok létrehozni, hanem jól bevált, meglevő változóm értékét akarom megváltoztattatni. Erre is lehetőséget ad a PowerShell, hiszen létezik referencia szerinti hivatkozás is:

[10] PS I:\>function bánt ([ref] $v)

>> {

>>     $v.value ++

>> }

>> 

[11] PS I:\>$a = 1

[12] PS I:\>bánt ([ref] $a)

[13] PS I:\>$a

2

[14] PS I:\>bánt ([ref] $a)

[15] PS I:\>$a

3

A bánt függvényem közvetlenül bántja a paraméterként átadott változóm értékét. Ezt úgy tudja megtenni, hogy neki nem érték alapján, hanem referencia (azaz memóriacím) alapján adjuk át a változót, amin aztán ő tud dolgozni. Mivel ez a memóriacím egy referenciát tartalmazó változóba töltődik át ($v), ezért értelemszerűen nem ennek a változónak az értékét kell manipulálni, hanem ezen referencia mögötti értéket kell módosítani ($v.value).

A függvény meghívásánál is oda kell figyelni, hiszen ha csak simán ennyit írnánk, az nem vezetne eredményre:

bánt $a

Ilyenkor a PowerShell nem végez automatikus típuskonverziót, azaz nem automatikusan az $a változó referenciáját adja át, segíteni kell neki a [ref] típusjelzővel. És mivel a szóközzel elválasztott két részt ([ref] és $a) alaphelyzetben két paraméterként értelmezné, ezért kell zárójelezni, és akkor már jó lesz, mint ahogy ez a [14]-es sorban látható volt:

[14] PS I:\>bánt ([ref] $a)



Word To HTML Converter