Интересный пример! Сначала это сбивает с толку, но оператор диапазона имеет низкий приоритет, так что первый оператор диапазона фактически вычисляется последним.
Он оценивается как:
1..< (2 + 1 + (3..<4))
, что в качестве диапазона 3..<4
просто 3
, становится
1..< (2 + 1 + 3)
, наконец, давая
1..<6
, что, как вы обнаружили, [1, 2, 3, 4, 5]
.
Выражение приводит к ошибке времени выполненияесли второй диапазон генерирует список вместо одного значения.
https://ideone.com/YTNBLm
Приоритет оператора Groovy задокументирован здесь: https://groovy -lang.org / operator.html