Ошибка: ArrayBoundsError при использовании переменной - PullRequest
4 голосов
/ 08 ноября 2011

У меня есть массив статического размера длины 1, который я пытаюсь присвоить значению с индексом 0.

void main() {
   int length = 0;
   int[1] arr;

   arr[0] = 1;
   arr[length] = 2;
}

С помощью приведенного выше кода я получаю ошибку времени выполнения

Error: ArrayBoundsError array.d(6)

, который соответствует строке: arr [length] = 2.

Почему константа 0 работает, а переменная со значением 0 не работает?

1 Ответ

4 голосов
/ 08 ноября 2011

length имеет особое значение в выражениях индекса / слайса - он делает то же самое, что и $ (длина массива, индексируемого / нарезанного). Таким образом, arr[length] всегда приведет к ArrayBoundsError.

Примечание: length устарело в D2, и D1 и D2 будут выдавать предупреждение (когда предупреждения включены): array 'length' hides other 'length' name in outer scope.

...