无括号的Groovy范围迭代
下面的Groovy代码打印从1到5的数字范围无括号的Groovy范围迭代,groovy,Groovy,下面的Groovy代码打印从1到5的数字范围 (1..5).each {println it} 但是,当我忘记添加括号并执行以下操作时: 1..5.each { println it} 它只印5张 为什么这是合法的Groovy语法?我希望它要么表现为(1..5)版本,要么抛出一个异常,说我忘记了括号。5。在Groovy解析器中,每个都比1..5具有优先级。它之所以有效,是因为它正在做这样的事情: ret = 5.each { println it } range = 1..ret asser
(1..5).each {println it}
但是,当我忘记添加括号并执行以下操作时:
1..5.each { println it}
它只印5张
为什么这是合法的Groovy语法?我希望它要么表现为(1..5)版本,要么抛出一个异常,说我忘记了括号。
5。在Groovy解析器中,每个
都比1..5
具有优先级。它之所以有效,是因为它正在做这样的事情:
ret = 5.each { println it }
range = 1..ret
assert range == [1, 2, 3, 4, 5]
每个
的返回是集合本身在groovy中,
-运算符的优先级高于。
:
运算符重载
运算符的优先级继承权(其中一些我们还没有研究过)从最高到最低:
$(范围转义)
new()(括号)
[](订阅)(方法调用){}(可关闭块)[](列表/映射)
. ?. *. (点)
~ ! $ ()(铸造型)
**(电源)
++(前/后)——(前/后)+(一元)——(一元)
* / %
+(二进制)-(二进制)
> >>> .. ..<
<>=在as中的实例
== !=
&
^
|
&&
||
?:
= **= *= /= %= += -= = >>>= &= ^= |=
.each
的绑定强度可能大于。
,因此第二个命令相当于1..(5.each{println it})
,其中范围未使用。
new ()(parentheses)
[](subscripting) ()(method call) {}(closable block) [](list/map)
. ?. *. (dots)
~ ! $ ()(cast type)
**(power)
++(pre/post) --(pre/post) +(unary) -(unary)
* / %
+(binary) -(binary)
<< >> >>> .. ..<
< <= > >= instanceof in as
== != <=>
&
^
|
&&
||
?:
= **= *= /= %= += -= <<= >>= >>>= &= ^= |=