【问题标题】:PowerShell HashTable - self referencing during initializationPowerShell HashTable - 初始化期间的自引用
【发布时间】:2016-12-05 18:08:55
【问题描述】:

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

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

【问题讨论】:

  • 是的...这也是我的解决方案...但我希望有一个 $self.key ...或 $this.key ...

标签: powershell initialization hashtable


【解决方案1】:

恐怕使用对象初始化器语法是不可能的。虽然可以使用变量,但您必须在创建对象之前计算值。

【讨论】:

  • 这个答案已经迫在眉睫:-(.
【解决方案2】:

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

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

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

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

【讨论】:

  • 一个有趣的解决方案 - 有点奇怪但原创:-)
【解决方案3】:

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

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

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

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

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

    但是现在...我们可以参考第一部分中的项目
    哈希表的

【讨论】:

  • 这没有回答原始问题how to reference a hash table during its initialization。我不明白我的答案怎么可能是“不被接受”并失去 15 个代表,而这个答案——虽然在不同的情况下可能有用——实际上是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 2023-01-19
相关资源
最近更新 更多