PowerShell HashTable - 初始化期间的自引用

时间:2016-07-31 15:46:30

标签: powershell initialization hashtable

我有一个理论问题 - 如何在初始化期间引用哈希表,例如,计算基于其他已经声明的成员的成员。

Remove-Variable myHashTable -ErrorAction Ignore
$myHashTable = 
@{
    One = 1
    Two= 2
    Three = ??? # following expressions do not work 
        # $This.One + $This.Two or 
        # $_.One + $_.Two
        # $myHashTable.One + $myHashTable.Two
        # ????
}

$myHashTable.Three -eq 3 # make this $true

任何想法怎么做?它真的可能吗?

编辑: 这是我的解决方案:

$myHashTable = 
@{
    One = 1
    Two= 2
}
$myHashTable.Three = $myHashTable.One + $myHashTable.Two

3 个答案:

答案 0 :(得分:7)

使用对象初始化程序语法我不可能做到这一点。虽然可以使用变量,但您必须在创建对象之前计算值。

答案 1 :(得分:2)

我不推荐这个,但你可以两次或更多次迭代初始化程序:

(0..1) | %{
    $a = @{
        One = 1
        Two = $a.One + 1
    }
}

(0..2) | %{
    $b = @{
        One = 1
        Two = $b.One + 1
        Three = $b.Two + 1
    }
}

确保所有计算都是幂等的,即不依赖于多次迭代。

答案 2 :(得分:1)

您也可以重复此操作...

有时在哈希表很长的时候
并且只能在2次或3次重复中进行定义...
工作正常:

$AAA = @{
    DAT = "C:\MyFolderOfDats"
    EXE = "C:\MyFolderOfExes"
    }

$AAA += @{
    Data   = $AAA.DAT + "\#Links"

    Scripts  = $AAA.EXE + "\#Scripts"
    ScriptsX = $AAA.EXE + "\#ScriptsX"
    }
  
      
  • 请注意,在第二部分中,我们只是在第一部分中添加(+ =)
    ...

    ,但是现在...我们可以引用这些项了>在第一部分   哈希表
  •