Function 如何将函数指定为PowerShell函数中scriptblock参数的默认值?

Function 如何将函数指定为PowerShell函数中scriptblock参数的默认值?,function,powershell,parameters,block,defaults,Function,Powershell,Parameters,Block,Defaults,给定这些powershell函数,其中foo将scriptblock作为参数: function bar($name) { "Hello World $name" } function foo([scriptblock]$fun={}) { &$fun "Bart" } function foo([scriptblock]$fun=(get-command bar).scriptblock) { &$fun "Bart" } 是否可以将函数栏指定为$

给定这些powershell函数,其中foo将scriptblock作为参数:

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

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

是否可以将函数栏指定为$fun的默认值,而不是函数foo中的{}?

是的,这是可能的。例如,此方法用于将函数传入:

foo ((get-command bar).scriptblock)
在你的情况下,它会打印

Hello World Bart
因此,为了将其用作默认参数:

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

function foo([scriptblock]$fun={})
{
    &$fun "Bart"
}
function foo([scriptblock]$fun=(get-command bar).scriptblock)
{
    &$fun "Bart"
}
现在只是打电话

foo

得到相同的结果。

谢谢!最终我发现我可以使用$fun=${Function:\bar},但我不确定哪种方法更能揭示意图。啊,这是一个有趣的发现。它至少更短,甚至更快。我会玩一会儿。是的,它也更快。知道是有用的。为了完整起见,我可以用这个额外的选项更新我的答案,或者你也可以用这个有用的信息更新你的问题。