Powershell, имейте функциональную возвращаемую переменную, которая хранит его?

Действительно ли возможно иметь возврат функции название переменной, которая хранит его?

т.е. $a = myFunction

и имеет функция, знают, что сохранено в $a, когда $a динамично присвоен ему в оболочке?

2
задан 15 September 2015 в 18:17
3 ответа
function test() {
    write-Host "Called by: $($MyInvocation.Line)"
}

$a = test

Какие выходы

Called by:     $a = test

?

2
ответ дан 3 December 2019 в 10:41

Я не думаю, что это вообще возможно и не имеет смысла.

Это все равно, что ожидать, что целое число 42 будет храниться в переменной $answer.


Как только функция возвращает, в переменной хранится только ее возвращаемое значение (если оно есть) (если присваивается на самом деле). Если Get-Answer возвращает 42 и вы выдаете команду $answer = Get-Answer, то $answer действительно будет содержать 42, но никакая запись о том, что она хранилась там, не будет храниться, если она была возвращена из функции; для всех намерений и целей, конечные результаты $nswer = 42 и $answer = Get-Answer будут идентичны, если Get-Answer действительно вернётся 42. Кроме того, присвоение (если оно есть) происходит только после после возврата функции; функция только предоставляет возвращаемое значение (если оно есть); ее не волнует и не должно волновать, что PowerShell будет делать с этим значением после возвращения; и ее возвращаемое значение вполне может быть отброшено, вместо того, чтобы быть присвоенным чему-либо. Прямой связи между $answer и Get-Answer нет: что делает PowerShell, когда сталкивается с такой командой, как $answer = Get-Answer - это то, что делает PowerShell:

  • Выполнить Get-Answer
  • Get-Answer
  • Get-AnswerGet-Answer
  • Store this value in $answer

Никто из игроков не знает об этой ссылке; функция не знает, для чего будет использоваться ее возвращаемое значение, а переменная не знает, откуда берется ее присвоенное значение.

И даже если бы какая-то запись о том, что это присваивание когда-либо происходило, это определенно не произошло бы, пока Get-Answer все еще выполняется.

.
1
ответ дан 3 December 2019 в 10:41

С минимальной информацией, которой вы поделились, это лучшая догадка, которую я мог сделать.
Я в основном продолжу ваше утверждение "передать какой-нибудь другой вывод в другую функцию"

myFunction1 {
    ...code...
    return $someThing
}

myFunction2 {
    param ($param1)
    ...code...
}

Usage

$a = myFunction1
myFunction2 $a

Имейте в виду, что команды echo's или writee-hosts внутри функции являются ALSO возвращаемыми значениями. Используйте отладку на запись для отладочной информации, или если вам действительно нужна эта информация "return" в виде массива (или пользовательского объекта)

return @($var1, $va2, $var3)
0
ответ дан 3 December 2019 в 10:41

Теги

Похожие вопросы