Hvordan utelate $ null argumenter kaller en funksjon?

stemmer
1

Vurdere en slik funksjon:

$missed = {716C1AD7-0DA6-45e6-854E-4B466508EB96}

function Test($foo = $missed, $bar = $missed)
{
  if(!$foo)
  {
    throw error
  }

  if(!$bar)
  {
    throw error
  }
}

Jeg whould liker å kalle denne funksjonen på denne måten

Test -foo $foo -bar $bar

Men hvis $ foo eller $ bar er $ null, vil unntaket kastes. Den naive løsning er

if($foo -and $bar)
{
  Test -foo $foo -bar $bar
}
elseif ($foo)
{
  Test -foo $foo
}
elseif ($bar)
{
  Test -bar $bar
}
else
{
  Test
}

Hvordan kan jeg skrive dette hvis / else-blokken i en / to linjer?

Publisert på 07/04/2009 klokken 23:46
kilden bruker
På andre språk...                            


4 svar

stemmer
1

Du kan skrive funksjonen som -

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

Svarte 08/04/2009 kl. 00:12
kilden bruker

stemmer
3

Siden du har ingen kontroll over Test funksjon, så du kan gjøre dette:

$params = @()
if ($foo) {
    $params += "-Foo","`$foo"
}
if ($bar) {
    $params += "-Bar","`$bar"
}
Invoke-Expression "Test $params"
Svarte 09/04/2009 kl. 00:27
kilden bruker

stemmer
2
function m ($x) {if ($x) {$x} else {$missed}}

Test -foo (m $foo) -bar (m $bar)
Svarte 09/04/2009 kl. 03:19
kilden bruker

stemmer
1

Du kan bruke "splatting" som følger:

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

Det er ikke mye kortere, men det er et generelt nyttig triks.

Svarte 26/03/2012 kl. 19:51
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more