给出两个函数f1,f2,f2如何仅使用具有值的参数调用f2?
假设:
function f1($p1, $p2, $p3)
{
f2 -p1 $p1 -p2 $p2 -p3 $p3 # how do i write this line correctly?
}
function f2($p1=100, $p2=200, $p3=300)
{
write-host "P1: $p1"
write-host "P2: $p2"
write-host "P3: $p3"
}
正确:
calling: f2 -p1 1 -p3 3
returns: P1: 1, P2: 200, P3: 3
不正确:
calling: f1 -p1 1 -p3 3
returns: P1: 1, P2: , P3: 3
but i want: P1: 1, P2: 200, P3: 3
我想发生的是,如果在调用f1()时未提供P2值,则当它到达f2()时,它应该获得P2的默认值,因此P2应该为“ 200”。
我可以通过测试每个参数(如果已定义)来完成此操作,然后将其添加到集合中以便可以使用splatting,但是我可以简化此步骤而不必测试每个参数吗?
答案 0 :(得分:4)
尝试一下:
function f1
{
param ($p1,$p2,$p3)
$PSBoundParameters.Keys | foreach {'{0}: {1}' -f $_,$PSBoundParameters[$_]}
}
calling: f1 -p1 1 -p3 3
p1: 1
p2: 3
答案 1 :(得分:2)
我不知道其他答案是否足够清晰以达到准确的结果。我正在从Axel Anderson's Answer中吸取一些想法。
function f1($p1, $p2, $p3)
{
f2 @PSBoundParameters
}
function f2($p1=100, $p2=200, $p3=300)
{
write-host "P1: $p1"
write-host "P2: $p2"
write-host "P3: $p3"
}
Output:
f1 -p1 1 -p3 3
P1: 1
P2: 200
P3: 3
f1 -p1 1 -p3 3 -p2 2
P1: 1
P2: 2
P3: 3
请记住,这仅适用于两个函数,因为您的参数名称相同。