我在PowerShell中有一个高级功能,大致如下:
function Foo {
[CmdletBinding]
param (
[int] $a = 42,
[int] $b
)
}
这个函数可以使用两个、一个或者零个参数来运行。然而,成为可选项的第一个参数是第一个参数。因此,下面的情况是可以运行这个函数的:
Foo a b # the normal case, both a and b are defined
Foo b # a is omitted
Foo # both a and b are omitted
然而,通常情况下PowerShell会尝试将单个参数适应为“a”。因此,我考虑明确指定参数位置,其中“a”将具有位置0,“b”将具有位置1。但是,为了允许仅指定“b”,我尝试将“a”放入参数集中。但是,根据当前使用的参数集,“b”将需要不同的位置。
有什么好的解决方法吗?我想保留参数名称(实际上并不是“a”和“b”),因此使用$args可能是最后一招。我可能可以定义两个参数集,一个有两个强制参数,另一个有一个可选参数,但是在那种情况下,参数名称必须不同,对吧?