以下Groovy代码打印1到5的数字范围。
(1..5).each {println it}
但是,当我忘记添加括号时,请执行以下操作:
1..5.each { println it}
只打印5
为什么这种合法的Groovy语法?我希望这可以表现为(1..5)版本或抛出一个异常,说我忘记了括号。
答案 0 :(得分:3)
5.each
优先于Groovy解析器中的1..5
。它的工作原理是因为它做了这样的事情:
ret = 5.each { println it }
range = 1..ret
assert range == [1, 2, 3, 4, 5]
each
的回归是集合本身
答案 1 :(得分:3)
.
- 运算符在groovy中的优先级高于..
Source:
运算符重载
运营商的优先级层次结构,其中一些我们还没有看过,从最高到最低: $(范围转义)
new ()(parentheses) [](subscripting) ()(method call) {}(closable block) [](list/map) . ?. *. (dots) ~ ! $ ()(cast type) **(power) ++(pre/post) --(pre/post) +(unary) -(unary) * / % +(binary) -(binary) << >> >>> .. ..< < <= > >= instanceof in as == != <=> & ^ | && || ?: = **= *= /= %= += -= <<= >>= >>>= &= ^= |=