Я пытаюсь создать функцию, которая сама может создавать функции с помощью команды Set-Item, где я передаю блок сценария для новой функции параметру -Value команды Set-Item. Я столкнулся с проблемой, когда использование GetNewClosure в блоке сценария не работает, и я просто не знаю, что делаю неправильно.
В приведенном ниже коде сначала я создаю функцию вручную (testFunc), которая работает по назначению, при этом установка $x на 2 после создания функции не приведет к тому, что функция вернет 2; вместо этого она возвращает 1, потому что это было значение $x на момент создания функции. Но когда я пытаюсь сделать то же самое через функцию make-function, поведение меняется.
Я уверен, что упускаю из виду что-то маленькое.
> $x = 1
> $block = {$x}.GetNewClosure()
> Set-Item function:global:testFunc -Value $block
> testFunc
1
> $x = 2
> testFunc
1 # still 1 because of GetNewClosure - this is expected behavior
> $x = 1
> function make-function { $block2 = {$x}.GetNewClosure()
Set-Item function:global:testFunc2 -Value $block2
}
> make-function
> testFunc2
1
> $x = 2
> testFunc2
2 # Why is it not returning 1 in this case?