代码之家  ›  专栏  ›  技术社区  ›  alex2k8

我怎么知道PowerShell函数参数被省略了

  •  3
  • alex2k8  · 技术社区  · 16 年前

    function Test($foo, $bar)
    {
      ...
    }
    

    Test -foo $null
    Test
    

    我怎么知道foo什么时候被省略了,什么时候是$null?

    3 回复  |  直到 16 年前
        1
  •  4
  •   zdan    9 年前

    如果你使用的是Powershell V2或更高版本,你可以使用$PSBBoundParameters变量,这是一个列出当前范围内所有绑定参数的字典。

    this

        2
  •  1
  •   Richard    16 年前

    除非可以捕获从param语句抛出的异常(并且由于param必须是第一个,我看不出这会起作用):

    function {
      trap { "Something failed" }
      param($foo = $(throw "Foo not specified"))
      ...
    

    然后我看不出有什么办法(你可以用[switch]参数得到同样的结果:默认或显式 -mySwitch:$false ).

        3
  •  1
  •   alex2k8    16 年前

    $missed = "{716C1AD7-0DA6-45e6-854E-4B466508EB96}"
    
    function Test($foo = $missed, $bar)
    {
        if($foo -eq $missed) {
            Write-Host 'Missed'
        }
        else
        {
            Write-Host "Foo: $foo"
        }
    }
    
    Test -foo $null
    Test
    
    推荐文章