是否可以让函数返回存储它的变量的名称?
即 $a = myFunction
并且当在 shell 中将 $a 动态分配给该函数时,该函数是否知道它保存在 $a 中?
答案1
function test() {
write-Host "Called by: $($MyInvocation.Line)"
}
$a = test
输出
Called by: $a = test
?
答案2
我认为这根本不可能,也没有多大意义。
这就像期望整数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
执行期间发生。
答案3
根据您分享的最少信息,这是我能做出的最佳猜测。
我主要依据您所说的“将其他输出传递到另一个函数”
myFunction1 {
...code...
return $someThing
}
myFunction2 {
param ($param1)
...code...
}
用法
$a = myFunction1
myFunction2 $a
请注意,函数内的 echo 或 write-hosts 命令也是返回值。使用 write-debug 获取调试信息,或者如果您确实需要“返回”的信息,则将其作为数组(或自定义对象)返回
return @($var1, $va2, $var3)