2009-04-07 54 views
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的或$欄爲$空,將引發異常調用這個函數。天真的解決方案是

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

我該如何重寫此if/else塊在一/兩行?

回答

3

由於你有過測試功能無法控制,那麼你可以這樣做:

$params = @() 
if ($foo) { 
    $params += "-Foo","`$foo" 
} 
if ($bar) { 
    $params += "-Bar","`$bar" 
} 
Invoke-Expression "Test $params" 
1

你可以寫的功能 -

如果($ foo的!){$ FOO = $錯過}
如果($吧!){$欄= $錯過}

+0

其實我沒有訪問測試函數實現和$錯過的變量。這只是一個例證。我只知道這個函數在任何參數爲$ null的時候會拋出錯誤 – alex2k8 2009-04-08 00:36:34

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

Test -foo (m $foo) -bar (m $bar) 
1

你可以按如下方式使用「潑灑」:

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

它並不短,但它是一個普遍有用的技巧。

相關問題