次の関数を検討してください。
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
返されます。明らかに、少なくとも[scriptblock]
パラメーターについては、splat パラメーターが使用されている場合、powershell はデフォルト値を尊重していません$null
。ただし、powershell は .xml のデフォルト値を尊重します[string]
。ここで何が起こっているのですか?
$null splat パラメーターを使用する場合、Powershell はどの型に対してデフォルト値を尊重しますか?