как вызвать переменную из функции - PullRequest
1 голос
/ 06 февраля 2020
function test{
  for($a=0;$a -le 2;$a++){
     if($a -eq 1){break}
  }
}
#----outside----
write-output $a

Как вызвать переменную из функции и не использовать return для получения $a?

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Помимо использования областей действия , как описано в Ответ Роба , существует также возможность отправки параметра по ссылке .

Это означает, что внутри функции используется ссылка на исходную переменную, поэтому независимо от того, что функция делает с ней, это влияет на исходное значение.

Недостатком является то, что при использовании ссылок необходимо использовать Value свойство типа System.Management.Automation.PSReference для доступа / изменения ваших данных, как показано в следующем примере:

function test ([ref]$a) {
  for ($a.Value = 0; $a.Value -le 2; $a.Value++){
     if ($a.Value -eq 1) {break}
  }
}

#----outside----
$a = 0 
test ([ref]$a)  # the parameter needs to be wrapped inside brackets and prefixed by [ref]
Write-Output $a

При отправке параметра, который является типом объекта, например, Hashtable, затем по умолчанию он всегда передается функции по ссылке, а для тех, кто не использует [ref] акселератор.

1 голос
/ 06 февраля 2020

Вы пытались установить глобальную переменную?

$var="Test"
function test()
{
    $global:var="blub"
}
test
$var

или

$a = 0

function test{
  for($global:a=0;$global:a -le 2;$global:a++){
     if($global:a -eq 1){break}
  }
}
test
write-output $a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...