Обратите внимание на следующий фрагмент кода в groovy:
def static void main(String... args) {
def arr = [1, 2, 3, 4, 5]
for (int f in arr) {
Thread.start { print f + ', '}
}
}
Out: 2, 3, 5, 5, 5,
Я был удивлен этим выходом. Почему "5" было напечатано несколько раз? Кроме того, все выглядит хорошо, используя эквивалентный код в Java:
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5};
for (int f : arr) {
new Thread(() -> { System.out.print(f + ", "); }).start();
}
}
Out: 1, 5, 4, 3, 2,
Может кто-нибудь объяснить, почему это так? Похоже, проблема с groovy заключается в реализации Closure. Однако это поведение довольно странно. Это какая-то ошибка, или я просто не понимаю, как работает groovy?
Спасибо!