下面的 Groovy 代码打印从 1 到 5 的数字范围。
(1..5).each {println it}
但是,当我忘记添加括号时,请执行以下操作:
1..5.each { println it}
它只打印 5
为什么这是合法的 Groovy 语法?我希望这要么表现得像 (1..5) 版本,要么抛出一个异常,说我忘记了括号。
最佳答案
5.each
优先于 1..5
在 Groovy 解析器中。它有效,因为它正在做这样的事情:
ret = 5.each { println it }
range = 1..ret
assert range == [1, 2, 3, 4, 5]
each
的回归是集合本身
关于不带括号的 Groovy 范围迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26100086/