Как опустить $ null аргументы, вызывающие функцию? - PullRequest
1 голос
/ 08 апреля 2009

Рассмотрим такую ​​функцию:

$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
}

Как мне переписать это, если / else блок в одну / две строки?

Ответы [ 4 ]

3 голосов
/ 09 апреля 2009

Поскольку у вас нет контроля над функцией теста, вы можете сделать это:

$params = @()
if ($foo) {
    $params += "-Foo","`$foo"
}
if ($bar) {
    $params += "-Bar","`$bar"
}
Invoke-Expression "Test $params"
2 голосов
/ 09 апреля 2009
function m ($x) {if ($x) {$x} else {$missed}}

Test -foo (m $foo) -bar (m $bar)
1 голос
/ 26 марта 2012

Вы можете использовать «splatting» следующим образом:

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

Это не намного короче, но обычно полезный трюк.

1 голос
/ 08 апреля 2009

Вы можете написать функцию как -

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...