ответ Джоуи содержит хорошую информацию, но если все, что вам нужно, это сослаться на ваши функции с помощью name , , определите ваш массив как содержащий имена функций как строки и вызывать функции по этим строкам с помощью &
, оператора вызова :
function Hello { "Hello!" }
function HowAreYou { "How are you?" }
function Goodbye { "Goodbye!" }
# The array of function names *as strings*.
# Note that you don't need @(...) to create an array.
$funcs = 'Hello', 'HowAreYou', 'Goodbye'
foreach ($func in $funcs)
{
# Use & to call the function by the name stored in a variable.
& $func
}
Проблема заключается в том, что все функции выполняются через строку, которая добавляет их в массив (т. Е. $ Scripts).
Это потому, что ваши элементы массива представляют собой выражения (из-за включающего (...)
), которые вызывают функции (например, (Hello)
вызывает Hello
и выводит элемент массива), учитывая, что на них ссылаются без одинарных или двойных кавычек .
В отличие, скажем, от bash
, вы не можете определить string элементы массива как barewords (токены без заключения в одинарные или двойные кавычки); Например, ниже приведена синтаксическая ошибка в PowerShell:
# !! Does NOT work - strings must be quoted.
$funcs = Hello, HowAreYou, GoodBye # ditto with @(...)