问题描述
因为 dart 并不是所有的东西都是一个表达式 (Like Kotlin) 我想知道下一个代码怎么可能运行:
示例 1
我做了一个 for 循环,以某种方式返回每个数组项,这就像一个解构,但使用了另一种语法。
void main() {
final numbers = [1,2,3];
final computednumbers = [for(final n in numbers) n];
print(computednumbers);
}
它打印:[1,3]
示例 2
[
Text("My Text"),// Compiles fine
if (myExpressionIsTrue) Text("Optional Text")
]
最后,如果 myExpressionIsTrue
为真,它会创建一个没有元素的“解构”数组。令我困惑的一件事是,如果我将 if 与 {}
放在一起,它不会编译,如下所示:
[
Text("My Text"),if (myExpressionIsTrue) { // This fails at compile time
Text("Optional Text")
}
]
问题
问题是它是如何工作的,因为 if
或 for
不是表达式,允许这样做的语言功能的名称是什么?
解决方法
该功能的名称是collection for 和collection if。请参阅Lists section of the Dart Language Tour。
我还强烈建议您阅读文章 Making Dart a Better Language for UI,其中讨论了该功能设计中的许多注意事项。