在files1数组中创建第二个数组时,必须将数学表达式放在括号中。运算符的层次结构在这里不适用吗?
//a[contains(@span,'Target')]
答案 0 :(得分:5)
,
(数组构造运算符)的优先级高于*
- 请参阅Get-Help about_Operator_Precedence
注意:以下代码段不使用数组子表达式运算符@(...)
,因为没有必要指定数组文字 - 数组构造运算符,
是足够的。
因此,
2*3, 4*5
被解析为:
2 * (3, 4) * 5
并且PowerShell不知道如何在*
的RHS上使用数组。
需要使用括号显示优先级:
(2*3), (4*5)
生成所需的数组6, 20
。
作为旁白:PowerShell支持*
的 LHS 上的数组,虽然不是数字意义上的:使用数组作为LHS(扁平地) 按照(标量,数字)RHS上指定的频率复制该数组 - 类似于LHS上的字符串如何与*
一起复制:
> (2,3) * 2 # equivalent of: 2, 3, 2, 3
2
3
2
3
虽然我真的不知道,
比*
等运算符更高优先级的设计原理,但我想到了一个可能的原因:
某些PowerShell运算符 - 尤其是-replace
和-split
- 将数组作为其RHS。
如果,
具有更高的优先级,则可以使用以下表达式,而无需在RHS的元素周围使用括号:
> 'A barl and his money are soon parted.' -replace 'bar', 'foo'
A fool and his money are soon parted.
如果我自己的实际经验是可以接受的,遇到这个优先级问题,这个问题的意外方式是罕见的。