是否有可能在D2中防止不可传递地重新分配变量?

时间:2012-02-16 17:54:50

标签: d

是否可以防止在D2中非传递地重新分配变量?

例如:

final int[] a = [0];
a[0] = 1; // OK.
a = []; // ERROR.

我在这里只看到constimmutablehttp://www.dlang.org/const3.html

1 个答案:

答案 0 :(得分:6)

没有。你所拥有的是constimmutable,它们是传递性的(如果不是,它们真的不会起作用)。你可以做到

const(int)[] a = [0];
a[0] = 1; // ERROR.
a = []; // OK;

但不是你要找的东西。

constimmutable具有传递性时,编译器可以提供更好的保证。此外,immutable实际上对线程没有任何用处(其存在的主要原因之一),除非它是可传递的,并且因为任何immutable必须能够const,{ {1}}也必须是传递性的。因此,必要时,它们不能用于简单地防止可变重新分配。并且语言中没有其他构造用于此。