println GroovySystem.version
final r = (1..10).reverse()
final r1 = (10..1)
assert r == r1
assert r.takeWhile { it > 5 } == r1.takeWhile { it > 5 }
第二个断言失败
2.2.2
Exception in thread "main" Assertion failed:
assert r.takeWhile { it > 5 } == r1.takeWhile { it > 5 }
| | | | |
| [10, 9, 8, 7, 6] | | [5, 4, 3, 2, 1]
| | [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
| false
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
答案 0 :(得分:1)
当您使用(10..1)
时,您有一个groovy.lang.IntRange
,而当您对其应用reverse()
时,会得到java.util.ArrayList
个结果。当你对它应用takeWhile()
时,似乎两种类型的行为都不同;至少我测试的2.1.7
和2.3.7
版本(或2.2.2
作为OP评论),而2.4.3
或2.4.0
没有问题@Opal评论。所以在groovy上似乎是一个固定的错误。
如果您还将r1
转换为调用java.util.ArrayList
的{{1}},则所有内容在您正在使用的groovy版本中都能正常运行:
toList()
希望这有帮助,