10

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}

2 Answers 2

23

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]
Sign up to request clarification or add additional context in comments.

Comments

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  
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.