Можно ли предотвратить переназначение переменных нетранзитивно в D2? - PullRequest
5 голосов
/ 16 февраля 2012

Можно ли предотвратить непереходное переназначение переменных в D2?

Например:

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

Я вижу только const и immutable здесь: http://www.dlang.org/const3.html

1 Ответ

6 голосов
/ 16 февраля 2012

Нет. То, что у вас есть, это const и immutable, и они транзитивны (они действительно не сработали бы, если бы не были). Вы можете сделать

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

Но не то, что вы ищете.

Компилятор может дать лучшие гарантии, когда const и immutable транзитивны. Кроме того, immutable действительно бесполезен для многопоточности (одна из его основных причин для существования), если только он не транзитивен, и потому что все, что immutable должно быть в состоянии const, const должно быть транзитивным Что ж. Поэтому по необходимости их нельзя использовать для простой защиты от переназначения переменных. И в этом языке нет других конструкций для этого.

...