比较运算符和函数引用

Comparison operator and function references

将函数引用为 -eq 运算符的 left-hand 端生成 我无法解释的结果:

PS C:\> function mj { 23 }
PS C:\> mj -eq 23
23
PS C:\> mj -eq 45
23

第一种情况几乎使函数的 return 值看起来好像是 被解释为 collection 大小为一(可能是为了容纳具有多个语句的函数),但是 理论不适用于第二种情况。

从分组运算符内或作为 sub-expression 引用函数 产生更直观的结果:

PS C:\> (mj) -eq 23
True
PS C:\> (mj) -eq 45
False
PS C:\> $(mj) -eq 23
True
PS C:\> $(mj) -eq 45
False

鉴于这些更可预测的形式,对第一个的实际反应 示例可能是 “不要做 那个。" 尽管如此,我还是想了解发生了什么,因为我很担心 where/how 底层行为可能会影响其他代码。

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  1320

我相信评论已经解释过了,grouping operator (..) 不仅是优先级所必需的,而且如文档中的示例所示,它 允许您让命令的输出参与表达式.

没有它,PowerShell 将 -eq 解释为函数 mj 的参数,将 23 解释为所述参数的参数。

您可以通过将 $args or a parameter that takes ValueFromRemainingArguments 添加到您的函数来测试它:

function mj { 23; $args }

function mjWithRemainingArgs {
    param(
        [parameter(ValueFromRemainingArguments)]
        $remargs
    )

    23; $remargs
}

PS /> mj -eq 23
23
-eq
23

PS /> mjWithRemainingArgs -eq 45
23
-eq
45