関数がそれを格納する変数の名前を返すようにすることは可能ですか?
つまり$ 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がこの値を返した後、PowerShellがこの値をどのように処理するかを気にする必要はありません。そして、その戻り値は、何かに割り当てられる代わりに、非常にうまく破棄される可能性があります。 $answer
とGet-Answer
の間に直接のリンクはありません。$answer = Get-Answer
のようなコマンドに直面したときにPowerShellが行うことは次のとおりです。
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)