В императиве, ориентированном на объект языке, было бы разумнее иметь изменяемые или неизменные закрытия?Mutable или неизменяемые затворы
Например:
int i=5;
function() f={print(i);};
f();
i=6;
f();
Если замыкание изменчиво, это будет печатать:
5
6
Если неизменен, он будет печатать:
5
5
Я понимаю, что даже с неизменяемыми замыканиями, вы все равно можете это сделать:
class I {int i;}
I i=new I();
i.i=5;
function() f={
I j=i;
print(j.i);
};
f();
i.i=6;
f();
Итак, было бы лучше иметь изменяемые или неизменные затворы или иметь возможность для обоих? Неизбежные закрытия кажутся более легкими в реализации, поэтому на данный момент я думаю, что я пойду с этим, если нет веской причины не делать этого.
Терминология с изменяемым/неизменяемым замыканием является, по меньшей мере, неоднозначной, это также означает, что переменная, которая относится к самой закрытию, является изменяемой/неизменяемой. –