Powershell, tem variável de retorno de função que armazena isso?

2

É possível que uma função retorne o nome da variável que a armazena?

, por exemplo, $ a = myFunction

e a função sabe que ela é mantida em $ a, quando $ a é dinamicamente atribuído a ela em um shell?

    
por benignadmin 15.09.2015 / 17:17

3 respostas

2
function test() {
    write-Host "Called by: $($MyInvocation.Line)"
}

$a = test

Quais saídas

Called by:     $a = test

?

    
por 16.09.2015 / 00:24
1

Eu não acho que isso seja possível, nem faria muito sentido.

É como esperar que o inteiro 42 saiba se foi armazenado na variável $answer .

Quando uma função retorna, somente seu valor de retorno (se houver) é armazenado em uma variável (se uma atribuição for realmente usada). Se Get-Answer retornar 42 e você emitir o comando $answer = Get-Answer , $answer conterá 42 , mas não será mantido nenhum registro do fato de ter sido armazenado por ter retornado de uma função; para todos os efeitos, os resultados finais de $answer = 42 e $answer = Get-Answer são idênticos, se Get-Answer realmente retornar 42 .

Além disso, a atribuição (se houver) só acontece após uma função retorna; a função fornece apenas um valor de retorno (se houver); não importa e não deveria se importar com o que o PowerShell fará com esse valor depois que ele retornar; e seu valor de retorno poderia muito bem ser descartado em vez de ser atribuído a qualquer coisa. Não há um link direto entre $answer e Get-Answer : o que o PowerShell faz quando enfrenta um comando como $answer = Get-Answer :

  • Executar Get-Answer
  • Obtenha o valor de retorno de Get-Answer
  • Armazene este valor em $answer

Nenhum dos jogadores tem conhecimento deste link; a função não sabe para que seu valor de retorno será usado, e a variável não sabe de onde vem o valor atribuído.

E mesmo que algum registro desta tarefa tenha acontecido, definitivamente não teria acontecido ainda enquanto Get-Answer ainda estivesse sendo executado.

    
por 15.09.2015 / 20:40
0

Com as informações mínimas que você compartilhou, esse é o melhor palpite que eu poderia fazer.
Eu estou indo em grande parte em sua declaração de "passar algum outro resultado em uma função diferente"

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

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

Uso

$a = myFunction1
myFunction2 $a

Esteja ciente de que os cmds de echo ou write-hosts dentro de uma função também retornam valores. Use write-debug para informações de depuração, ou se você realmente precisar da informação, o retorno "retornado" é como uma matriz (ou um objeto personalizado)

return @($var1, $va2, $var3)
    
por 15.09.2015 / 21:05