【问题标题】:Splatting subproperty?飞溅的子属性?
【发布时间】:2015-09-28 19:41:14
【问题描述】:

是否可以从子属性中调用参数?

例如,这里有一个示例函数来说明:

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,但我没有尝试任何工作。

【问题讨论】:

标签: powershell


【解决方案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 命令参数”部分。

【讨论】:

  • 实际上我意识到我的问题出在其他地方。我曾经尝试过你的语法,但没有奏效。然而,罪魁祸首是我通过的参数。我的真实功能没有得到正确的参数。无论如何,谢谢
猜你喜欢
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
相关资源
最近更新 更多