2016-07-31 72 views
5

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

回答

5

这将是不可能的。尽管可以使用变量,但您必须在创建对象之前计算这些值。

+0

这个答案一直在隐现:-( – Honzajscz

1

我不建议这一点,但你可以两次或更多次迭代初始化:

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

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

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

+0

一个有趣的解决方案 - 有点奇怪,但原创:-) – Honzajscz