【问题标题】:PowerShell multi-dimensional collection logic for -eq-eq 的 PowerShell 多维收集逻辑
【发布时间】:2013-05-03 21:26:12
【问题描述】:

感谢PowerShell Logic,我熟悉了当左操作数是集合时-eq 如何工作的一些复杂性——而不是布尔值,-eq 将返回与右操作数相等的元素数组。来自 3.0 规范:

如果左操作数指定的值不是集合,则 结果具有布尔类型。否则,结果可能为空 包含元素的无约束一维数组 与指定的值进行比较时测试 True 的集合 右操作数。

也就是说,我发现了一个对我来说不太有意义的案例。如果我声明一个数组的元素也是一个数组,我实际上无法让-eq 匹配该元素:

$a = @( 1, @(2, 3) )
$a -eq 1              # results in an array with a single element, containing 1
$a -eq @( 2, 3 )      # results in an empty array

发生了什么事?很难判断这是 PowerShell 包装了混合类型的数组元素、包装了二维数组、值与引用类型相等检查的问题,还是其中的任何子集。

【问题讨论】:

标签: powershell equality equals-operator


【解决方案1】:

我相信这与 .NET 中的数组比较仅比较两个对象引用同一个对象,而不是它们具有等效值的事实有关。考虑:

# ~> @(2,3).Equals(@(2,3))
False

# ~> $arr = @(2,3)

# ~> $arr.Equals($arr)
True

# ~> $arr.Equals(@(2,3))
False

# ~> @(1, $arr) -eq $arr
2
3

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 2013-04-01
    • 2021-10-05
    • 2012-06-08
    • 2017-02-23
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多