Is there a function pointer or array of functions

2020-06-12 05:02发布

问题:

I would like to do something like this. Index into an array of functions and apply the appropriate function for the desired loop index.

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}

回答1:

Here's an example of how to do this using the call (&) operator.

# 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. this means your pipeline should bve amended to something like:

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


回答2:

Here is something similar also using the & operator:

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  
}