1

考虑这样的功能:

$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 块?

4

4 回答 4

3

由于您无法控制 Test 功能,因此您可以这样做:

$params = @()
if ($foo) {
    $params += "-Foo","`$foo"
}
if ($bar) {
    $params += "-Bar","`$bar"
}
Invoke-Expression "Test $params"
于 2009-04-09T00:27:56.637 回答
2
function m ($x) {if ($x) {$x} else {$missed}}

Test -foo (m $foo) -bar (m $bar)
于 2009-04-09T03:19:22.450 回答
1

您可以将函数编写为 -

if (!$foo) {$foo = $missed}
if (!$bar) {$bar = $missed}

于 2009-04-08T00:12:04.467 回答
1

您可以按如下方式使用“飞溅”:

$params = @{}
if ($foo) {$params['foo'] = $foo}
if ($bar) {$params['bar'] = $bar}
Test @params

它并不短,但它通常是一个有用的技巧。

于 2012-03-26T19:51:28.733 回答