2009-07-07 7 views
10

Mi piacerebbe fare qualcosa di simile. Indicizzare in una serie di funzioni e applicare la funzione appropriata per l'indice del ciclo desiderato.Esiste un puntatore a funzione o un array di funzioni in PowerShell?

for ($i = 0; $i -lt 9; $i++) 
{ 
    $Fields[$i] = $Fields[$i] | $($FunctionTable[$i]) 
} 
#F1..F9 are defined functions or rather filter functions 

$FunctionTable = {F1}, 
       {F2}, 
       {F3}, 
       {F4}, 
       {F5}, 
       {F6}, 
       {F7}, 
       {F8}, 
       {F9} 

risposta

23

Ecco un esempio di come eseguire questa operazione utilizzando la chiamata (&) dell'operatore.

# define 3 functions 
function a { "a" } 
function b { "b" } 
function c { "c" } 

# create array of 3 functioninfo objects 
$list = @(
    (gi function:a), 
    (gi function:b), 
    (gi function:c) 
) 

0, 1, 2 | foreach { 
    # call functions at index 0, 1 and 2 
    & $list[$_] 
} 

-Oisin

P.S. questo significa che il gasdotto dovrebbe BVE modificata a qualcosa di simile:

$Fields[$i] = $Fields[$i] | & $FunctionTable[$i] 
+0

molto cool. Molte grazie! – tellingmachine

2

Ecco qualcosa di simile anche utilizzando l'operatore di &:

 
function f1 
{ "Exec f1" } 

function f2 
{ "Exec f2" } 

function f3 
{ "Exec f3" } 

function f4 
{ "Exec f4" } 

function UseFunctionList ([string[]]$FunctionList) 
{ 
foreach ($functionName in $functionList) 
    { 
    & $FunctionName 
    } 
} 

function Go 
{ 
'List 1' 
$FunctionList = 'f1','f2','f3','f4' 
UseFunctionList $FunctionList 
'List 2' 
$FunctionList = 'f4','f3','f2' 
UseFunctionList $FunctionList 
} 

Problemi correlati