Еще одна ... родительские переменные во вложенном foreach-объекте - PullRequest
1 голос
/ 10 июля 2019

почему не работает?

1..2 | % {
    3..4 | % {
        Get-Variable -Name '_' -Scope 0
        Get-Variable -Name '_' -Scope 1 # <===
    }
    Get-Variable -Name '_' -Scope 0
}

1 Ответ

0 голосов
/ 10 июля 2019

Это не работает, как вы ожидаете, потому что % (ForEach-Object) не вводит новую область.

Вот доказательство: $x изменяется в той же области, в родительскомэто не изменится:

$x = 'old'
1 | % { $x = 'new' }
$x

Если вам нужны области действия, вы можете использовать конструкцию &{process{...}} вместо ForEach-Object

1..2 | & {process{
    3..4 | & {process{
        Get-Variable -Name '_' -Scope 0
        Get-Variable -Name '_' -Scope 1 # <===
    }}
    Get-Variable -Name '_' -Scope 0
}}

Вышеописанное работает как ожидалось.

Примечание: &{process{...}} (новая область) или .{process{...}} (та же область) также быстрее, чем %.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...