我是Dart的新手,我一直在试验Iterable数据类型。在学习过程中,我遇到了声明和初始化Iterable变量的不同方法。以下是我尝试过的:
void main () {
Iterable<String> iterable = ['Salad', 'Popcorn', 'Toast'];
Iterable<String> iterable2 = const ['Salad', 'Popcorn', 'Toast'];
const Iterable<String> iterable3 = ['Salad', 'Popcorn', 'Toast'];
var iterable4 = ['Salad', 'Popcorn', 'Toast'];
var iterable5 = const ['Salad', 'Popcorn', 'Toast'];
const iterable6 = ['Salad', 'Popcorn', 'Toast'];
}
我对这六个声明的区别感到有点困惑。有人能解释一下它们是如何申报的,以及可以或不可以用它们做什么的细微差别吗?例如,我可以在这些迭代对象中添加或删除元素吗,或者对其中的一些元素有限制吗?
谢谢你的帮助。
1条答案
按热度按时间z4bn682m1#
您可以通过在左括号前添加
const
关键字来创建const
列表文字,就像您在示例2和示例5中所做的那样。您还可以通过声明
const
变量来创建const
列表,因为此类变量的值必须为const
。你已经在示例3和6中做到了这一点。const
列表永远不能在运行时更改。这两种类型的声明之间的区别在于,以第一种方式声明的变量(常规变量)可以被 * 重新赋值 *。例如,虽然您不能向列表中添加一个项,但您可以将新列表分配给这些变量。不能使用const
变量执行此操作。至于前三个变量和最后三个变量之间的差异,您正在将前三个变量从
List
向上转换到Iterable
。这意味着您不能使用任何List
API,例如add
。类型推断发生在最后三个声明中,因此它们是隐式List
变量。