在命令式、面向对象的语言中,具有可变或不可变闭包是否更有意义?
例如:
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();
那么,拥有可变闭包或不可变闭包会更好,还是两者都有选择?不可变闭包似乎更容易实现,所以在这一点上,我想我会继续这样做,除非有充分的理由不这样做。