考虑以下函数:
function f1{
param(
$sb = {},
$s = ''
)
if ($sb -isnot [scriptblock]) { 'scriptblock' }
if ($s -isnot [string] ) { 'string' }
}
现在使用 splat 参数调用它:
PS C:\> $splat = @{foo='bar'}
PS C:\> f1 @splat
正如预期的那样,没有返回任何内容。$null
现在用splat 参数再试一次:
PS C:\> $splat = $null
PS C:\> f1 @splat
scriptblock
奇怪的是,scriptblock
被退回。显然,至少对于参数,当使用splat 参数[scriptblock]
时,powershell 不遵守默认值。$null
但是 powershell 确实尊重[string]
. 这里发生了什么?
使用 $null splat 参数时,Powershell 支持哪些类型的默认值?