如何理解Dart中const和Iterable的不同组合

dwbf0jvd  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(68)

我是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'];
}

我对这六个声明的区别感到有点困惑。有人能解释一下它们是如何申报的,以及可以或不可以用它们做什么的细微差别吗?例如,我可以在这些迭代对象中添加或删除元素吗,或者对其中的一些元素有限制吗?
谢谢你的帮助。

z4bn682m

z4bn682m1#

您可以通过在左括号前添加const关键字来创建const列表文字,就像您在示例2和示例5中所做的那样。
您还可以通过声明const变量来创建const列表,因为此类变量的值必须为const。你已经在示例3和6中做到了这一点。
const列表永远不能在运行时更改。这两种类型的声明之间的区别在于,以第一种方式声明的变量(常规变量)可以被 * 重新赋值 *。例如,虽然您不能向列表中添加一个项,但您可以将新列表分配给这些变量。不能使用const变量执行此操作。
至于前三个变量和最后三个变量之间的差异,您正在将前三个变量从List向上转换到Iterable。这意味着您不能使用任何List API,例如add。类型推断发生在最后三个声明中,因此它们是隐式List变量。

相关问题