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

Учитывая эти функции powershell, где foo принимает блок сценария в качестве параметра:

function bar($name)
{
    "Hello World $name"
}

function foo([scriptblock]$fun={})
{
    &$fun "Bart"
}

Можно ли указать функциональную панель по умолчанию для $fun вместо {} в функции foo?


person 8DH    schedule 15.10.2012    source источник


Ответы (1)


Да, это возможно. Например, этот способ работает для передачи функции в:

foo ((get-command bar).scriptblock)

В вашем случае он печатает

Hello World Bart

Таким образом, чтобы использовать его в качестве параметра по умолчанию:

function foo([scriptblock]$fun=(get-command bar).scriptblock)
{
    &$fun "Bart"
}

Теперь просто звоню

foo

получает тот же результат.

person Roman Kuzmin    schedule 15.10.2012
comment
Спасибо! В конце концов я обнаружил, что могу использовать $fun=${Function:\bar}, но я не совсем уверен, какая альтернатива более раскрывает намерения. - person 8DH; 16.10.2012
comment
О, это интересная находка. Это короче, по крайней мере, или, может быть, даже быстрее. Я немного поиграю с этим. - person Roman Kuzmin; 16.10.2012
comment
Да, это также быстрее. Это полезно знать. Я могу обновить свой ответ этой дополнительной опцией для полноты, или вы можете обновить свой вопрос этой полезной информацией. - person Roman Kuzmin; 16.10.2012