PowerShell: элегантный способ создания замыканий - PullRequest
8 голосов
/ 02 декабря 2009

Кит Хилл объяснил мне, что блоки в PowerShell не являются замыканиями и что для создания замыканий из блоков мне нужно вызвать метод .GetNewClosure () .

Есть ли какой-нибудь элегантный способ создания замыканий из блоков? (например, создать упаковочную функцию, псевдоним ?, ...)

Пример:

{ block }
${ closure } # ???

Ответы [ 2 ]

4 голосов
/ 03 декабря 2009

Вы можете создать функцию, которая принимает блок скриптов, вызывает GetNewClosure и возвращает закрытие. Важно, чтобы вы вызывали эту функцию, используя оператор точки, например ::1001

function =>([scriptblock]$_sb_)
{
    $_sb_.GetNewClosure()
}

function A($block) 
{
    B (. => {Write-Host 2; &$block})
}

function B($block) {Write-Host 1;&$block}

A {Write-Host 3}

Не уверен, что это намного лучше, чем просто вызывать GetNewClosure () в блоке скриптов. Обратите внимание, что вы можете выбрать другое имя для функции. Я собирался что-то более похожее на C # лямбды.

2 голосов
/ 02 декабря 2009

Эти ссылки могут быть полезны при обсуждении замыканий в PowerShell 2.0

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