【发布时间】:2017-11-06 19:07:16
【问题描述】:
我正在 Powershell 4.0 中试验 True 和 False。以下是查看空数组和空哈希表时的结果:
PS C:\Users\simon> $a = @()
PS C:\Users\simon> if ($a) { Write-Host "True" } else { Write-Host "False" }
False
PS C:\Users\simon> $a = @{}
PS C:\Users\simon> if ($a) { Write-Host "True" } else { Write-Host "False" }
True
为什么当空数组评估为 False 时,空哈希表评估为 True?
根据 Powershell 文档About Comparison Operators:
当输入是值的集合时,比较运算符 返回任何匹配的值。如果集合中没有匹配项, 比较运算符不返回任何内容。
据此,我希望哈希表和数组在它们为空时的行为相同,因为它们都是集合。我希望两者都评估为 False ,因为它们没有返回任何 if 子句。
【问题讨论】:
-
哈希表不是值的集合。它是具有键和值属性的字典条目的集合。我不希望能够对哈希表使用比较运算符,因为它不是一个连贯的表达式。您是否在测试键名或值?
-
@mjolinor:目前我只是在做实验。在过去,我使用过
if ($a) { ... }的测试来检查数组是否有元素。我以为我可以用哈希表做类似的事情,当哈希表表现出不同的行为时我感到很惊讶。