有人可以向我解释为什么PowerShell中的相等运算符不是对称关系?
PS> "" -eq 0
False
PS> 0 -eq ""
True
Run Code Online (Sandbox Code Playgroud)
Joe*_*oey 10
是的,-eq
在PowerShell中不是等价关系.虽然理论家们在这一点上可能会惊恐万分,但主要是为了使语言更好地传达思想和简化理解.
例如,PowerShell 总是尝试将二元运算符中的不同类型转换为左操作数的类型,这就是您在问题中看到行为的原因.在实践中,我发现这很少是一个问题,除了人为的例子.在我自己的数据中,我通常会使用匹配类型进行比较,在处理其他数据时,转换通常无害,因为它们会破坏其含义.在这种情况下,我认为语言的可预测性比获得数学理想更重要(考虑到计算机中的数字只是数学实体的近似值,这在任何地方都无法实现).
另一件事是,如果比较操作符(左操作数-eq
,-gt
,-lt
,-ge
,-le
,-match
,...)是一个集合,然后操作员返回集合,其中运营商将产生真正的所有项目.这将是在这里您可以快速筛选集合而不需要的情况下where
,但我想真正的好处是,你可以写条件if ($foo -gt 4)
,然后既可以指»如果$foo
是标量值比4«大或»如果$foo
是一家集包含大于4«的项目,而无需将管道粘入if
.
归档时间: |
|
查看次数: |
616 次 |
最近记录: |