我有一个理论问题 - 如何在初始化期间引用哈希表,例如,计算基于其他已经声明的成员的成员。
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
答案 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"
}
- 请注意,在第二部分中,我们只是在第一部分中添加(+ =)
...
,但是现在...我们可以引用这些项了>在第一部分 哈希表