比较运算符和函数引用
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
将函数引用为 -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