LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

В замыкание можно передать только final (т. е. неизменяемую) переменную. А хочется всё же её изменить. В итоге передаётся массив из одного элемента и меняется его содержимое. Ссылка на сам массив при этом ведь не изменяется.

Это фактически костыль, который возникает в языках с управляемой памятью и отсутствием полноценных указателей.

C++:

int a;
int *b = &a;
...
*b = 10;

Java:

int[] b = new int[] { 0 };
...
b[0] = 10;

Очевидно, это актуально, когда хочется передать переменную в функцию таким образом, чтобы её изменение было видно из-вне.

Исправление KivApple, :

В замыкание можно передать только final (т. е. неизменяемую) переменную. А хочется всё же её изменить. В итоге передаётся массив из одного элемента и меняется его содержимое. Ссылка на сам массив при этом ведь не изменяется.

Это фактически костыль, который возникает в языках с управляемой памятью и отсутствием полноценных указателей.

C++:

int a;
int *b = a;
...
*b = 10;

Java:

int[] b = new int[] { 0 };
...
b[0] = 10;

Очевидно, это актуально, когда хочется передать переменную в функцию таким образом, чтобы её изменение было видно из-вне.

Исходная версия KivApple, :

В замыкание можно передать только final (т. е. неизменяемую) переменную. А хочется всё же её изменить. В итоге передаётся массив из одного элемента и меняется его содержимое. Ссылка на сам массив при этом ведь не изменяется.

Это фактически костыль, который возникает в языках с управляемой памятью и отсутствием полноценных указателей.

C++:

int a;
int *b = a;
...
*b = 10;

Java:

int[] b = new int[] { 0 };
...
b[0] = 10;

Очевидно, это актуально, когда хочется передать переменную в функцию и таким образом, чтобы изменение было видно из-вне.