是否可以从子属性中删除参数?
例如,这里有示例函数来说明:
function Get-Pow{
param(
[int]$x,
[int]$y
)
[Math]::Pow($x,$y)
}
可以使用以下方法调用此函数:
$args = @{ x=10; y=2 }
Get-Pow @args # outputs 100
这也可以使用简单的迭代来调用:
$powsOfTen = @(
@{ x=10; y=1 }
@{ x=10; y=2 }
@{ x=10; y=3 }
)
foreach($p in $powsOfTen){
Get-Pow @p # Outputs 10,100,1000
}
但是,如果参数哈希表来自子属性,则它不起作用:
$valuesToCompute = @(
@{ Id=1; Arguments = @{ x = 10; y= 1} }
@{ Id=2; Arguments = @{ x = 10; y= 2} }
@{ Id=3; Arguments = @{ x = 10; y= 3} }
)
foreach($valueToCompute in $valuesToCompute){
Write-Host $valueToCompute.Id
Get-pow @($valueToCompute.Arguments)
}
当args来自子属性时,我该如何调用我的函数?
我尝试了@valueToCompute.Arguments
,我尝试了$args = $valueToCompute.Arguments; Get-Pow @args
,但我没有尝试过任何工作。
答案 0 :(得分:1)
这对我有用:
function Get-Pow{
param(
[int]$x,
[int]$y
)
[Math]::Pow($x,$y)
}
$valuesToCompute = @(
@{ Id=1; Arguments = @{ x = 10; y= 1} }
@{ Id=2; Arguments = @{ x = 10; y= 2} }
@{ Id=3; Arguments = @{ x = 10; y= 3} }
)
foreach($valueToCompute in $valuesToCompute){
Write-Host $valueToCompute.Id
$splat = $valueToCompute.Arguments;
Get-pow @splat
}
请注意,通过阅读the splatting doc,@Args
是一个保留变量。请参阅" SPLATTING COMMAND PARAMETERS"。