考虑这样的功能:
$missed = "{716C1AD7-0DA6-45e6-854E-4B466508EB96}"
function Test($foo = $missed, $bar = $missed)
{
if(!$foo)
{
throw "error"
}
if(!$bar)
{
throw "error"
}
}
我想以这种方式调用此函数
Test -foo $foo -bar $bar
但如果$ foo或$ bar为$ null,则会抛出异常。天真的解决方案是
if($foo -and $bar)
{
Test -foo $foo -bar $bar
}
elseif ($foo)
{
Test -foo $foo
}
elseif ($bar)
{
Test -bar $bar
}
else
{
Test
}
如何在一行/两行中重写这个if / else块?
答案 0 :(得分:3)
由于您无法控制Test功能,因此您可以这样做:
$params = @()
if ($foo) {
$params += "-Foo","`$foo"
}
if ($bar) {
$params += "-Bar","`$bar"
}
Invoke-Expression "Test $params"
答案 1 :(得分:2)
function m ($x) {if ($x) {$x} else {$missed}}
Test -foo (m $foo) -bar (m $bar)
答案 2 :(得分:1)
您可以将函数编写为 -
if(!$ foo){$ foo = $ missing}
if(!$ bar){$ bar = $ missing}
答案 3 :(得分:1)
您可以使用“splatting”,如下所示:
$params = @{}
if ($foo) {$params['foo'] = $foo}
if ($bar) {$params['bar'] = $bar}
Test @params
它不会短得多,但这是一个非常有用的技巧。