如何直接从类静态方法splat哈希表?

问题描述 投票:0回答:2

我怎样才能得到相同的输出:

$ht = @{Object="Hi there";Foregroundcolor="Green"}
Write-Host @ht

没有使用/变量$ht

不要误会我的意思,我知道如何使用基本的CMDLet。我有一个生成动态哈希表的静态方法。看看这个简化的示例代码:

class HashtableGenerator
{
    static [hashtable]Answer()
    {
        return @{Object="Hallo Welt";ForegroundColor="Green"}
    }
}
$ht = [HashtableGenerator]::Answer()
Write-Host @ht

这工作得很好,但是有可能摆脱$ht变量,所以代码看起来像这样:

Write-Host @([HashtableGenerator]::Answer()) # Doesn't work
powershell hashtable static-methods
2个回答
1
投票

我很确定你现在要做的事情至少在这个时候是不可能的。 Splatting特定于散列表和数组变量。不返回函数,方法等的值.Technet for splatting有点支持这个

Splatting是一种将参数值集合作为单元传递给命令的方法。 PowerShell将集合中的每个值与命令参数相关联。 Splatted参数值存储在命名的splatting变量中,这些变量看起来像标准变量,但以At符号(@)而不是美元符号($)开头。 At符号告诉PowerShell您传递的是值集合,而不是单个值。

使用@ outside将告诉PowerShell将结果视为数组。 IIRC有一个半相关的功能请求,可以直接从哈希表定义中进行splat,而不是先保存到变量。


关于从变量属性splatting的相关问题:Splatting a function with an object's property


-2
投票

使用哈希表传递函数参数与隐式指定它们的方式相同。 Hashtable键用作参数名称,其对应的哈希表值用作参数值。

Write-Host -Object 'Hi there' -Foregroundcolor 'Green'
© www.soinside.com 2019 - 2024. All rights reserved.