为什么表达式需要在数组的括号中

时间:2017-03-13 20:16:04

标签: arrays powershell

在files1数组中创建第二个数组时,必须将数学表达式放在括号中。运算符的层次结构在这里不适用吗?

//a[contains(@span,'Target')]

1 个答案:

答案 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.

如果我自己的实际经验是可以接受的,遇到这个优先级问题,这个问题的意外方式是罕见的