Возможно ли, чтобы функция возвращала имя переменной, которая ее хранит?
т.е. $ 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
, но не будет сохраняться запись того факта, что он был сохранен там, после того как он был возвращен функцией; для всех намерений и целей конечные результаты $answer = 42
и $answer = Get-Answer
идентичны, если Get-Answer
действительно возвращается 42
.
Кроме того, назначение (если есть) происходит только после функция возвращает; функция предоставляет только возвращаемое значение (если есть); ему все равно, и его не должно волновать, что PowerShell будет делать с этим значением после его возврата; и его возвращаемое значение вполне может быть отброшено вместо того, чтобы быть присвоенным чему-либо. Нет прямой связи между $answer
и Get-Answer
: что делает PowerShell, когда сталкивается с такой командой, как $answer = Get-Answer
является:
Get-Answer
Get-Answer
$answer
Никто из игроков не знает об этой ссылке; функция не знает, для чего будет использоваться ее возвращаемое значение, а переменная не знает, откуда взялось присвоенное ей значение.
И даже если бы сохранилась какая-то запись о том, что это задание когда-либо происходило, этого бы точно не произошло, пока Get-Answer
все еще выполнялся.
С минимальным количеством информации, которой вы поделились, это лучшее предположение, которое я мог сделать.
Я в основном использую ваше утверждение «передать какой-то другой вывод в другую функцию».
myFunction1 {
...code...
return $someThing
}
myFunction2 {
param ($param1)
...code...
}
использование
$a = myFunction1
myFunction2 $a
Имейте в виду, что командные команды echo или write-hosts внутри функции ТАКЖЕ возвращают значения. Используйте write-debug для отладочной информации, или, если вам действительно нужна эта информация, «возвращаемая» возвращается в виде массива (или настраиваемого объекта)
return @($var1, $va2, $var3)