Из этого вопроса о переполнении стека я узнал, что семантика возврата PowerShell отличается, скажем, от семантики возврата С#. Цитата из вышеупомянутого вопроса:
PowerShell имеет действительно дурацкую семантику возврата - по крайней мере, если смотреть с более традиционной точки зрения программирования. Есть две основные идеи, чтобы обернуть вашу голову: весь вывод фиксируется и возвращается. Ключевое слово return действительно просто указывает на логическую точку выхода.
Давайте посмотрим на этот пример:
function Calculate
{
echo "Calculate"
return 11
}
$result = Calculate
Если вы подтвердите $result
вы поймете, что что-то не так. Вы ожидаете это:
11
Но реальность, которую вы на самом деле видите, другая:
Calculate
11
Таким образом, вместо того, чтобы возвращать только предполагаемое возвращаемое значение, вы фактически возвращаете массив.
Вы могли бы избавиться от операторов echo и не загрязнять возвращаемое значение, но если вы вызываете другую функцию из вашей функции, которая что-то повторяет, то у вас снова проблемы.
Как я могу написать функцию PowerShell, которая возвращает только одну вещь? Если встроенные функции PowerShell возвращают только одно значение, почему я не могу этого сделать?
Обходной путь, который я использую сейчас, и я хотел бы избавиться от:
function Calculate
{
# Every function that returns has to echo something
echo ""
return 11
}
# The return values is the last value from the returning array
$result = (Calculate)[-1]