错误:使用变量时出现 ArrayBoundsError
我有一个长度为 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 的变量不起作用?
I have a static size array of length 1, which I try to assign a value at index 0.
void main() {
int length = 0;
int[1] arr;
arr[0] = 1;
arr[length] = 2;
}
With the above code, I get a runtime error of
Error: ArrayBoundsError array.d(6)
which cooresponds the line: arr[length] = 2.
Why does the constant 0 work, but the variable with value 0 not work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
length
在索引/切片表达式中具有特殊含义 - 它与$
执行相同的操作(被索引/切片的数组的长度)。因此,arr[length] 总是会导致 ArrayBoundsError 。注意:
length
在 D2 中已弃用,D1 和 D2 都会发出警告(启用警告时):数组“length”隐藏外部作用域中的其他“length”名称
。length
has a special meaning inside index/slice expressions - it does the same thing as$
(the length of the array being indexed/sliced). Thus,arr[length]
will always result in anArrayBoundsError
.Note:
length
is deprecated in D2, and both D1 and D2 will issue a warning (when warnings are enabled):array 'length' hides other 'length' name in outer scope
.