Действительно ли возможно иметь возврат функции название переменной, которая хранит его?
т.е. $a = myFunction
и имеет функция, знают, что сохранено в $a, когда $a динамично присвоен ему в оболочке?
function test() {
write-Host "Called by: $($MyInvocation.Line)"
}
$a = test
Какие выходы
Called by: $a = test
?
Я не думаю, что это вообще возможно и не имеет смысла.
Это все равно, что ожидать, что целое число 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
$answer
Никто из игроков не знает об этой ссылке; функция не знает, для чего будет использоваться ее возвращаемое значение, а переменная не знает, откуда берется ее присвоенное значение.
И даже если бы какая-то запись о том, что это присваивание когда-либо происходило, это определенно не произошло бы, пока Get-Answer
все еще выполняется.
С минимальной информацией, которой вы поделились, это лучшая догадка, которую я мог сделать.
Я в основном продолжу ваше утверждение "передать какой-нибудь другой вывод в другую функцию"
myFunction1 {
...code...
return $someThing
}
myFunction2 {
param ($param1)
...code...
}
Usage
$a = myFunction1
myFunction2 $a
Имейте в виду, что команды echo's или writee-hosts внутри функции являются ALSO возвращаемыми значениями. Используйте отладку на запись для отладочной информации, или если вам действительно нужна эта информация "return" в виде массива (или пользовательского объекта)
return @($var1, $va2, $var3)