首页 > 解决方案 > Dart 多个函数调用/设置变量都在一行上

问题描述

我需要在函数的开头清除一些列表,否则它们会随着add方法变得越来越大,所以我可以使用= [].clear()实现这一点,但格式将它们全部放在单独的行上,如下所示:

listone.clear();
listtwo.clear();
three.clear();
listfour.clear();
listfive.clear();
listsix.clear();

我想做这样的事情,但它不允许:

listone.clear(), listtwo.clear(), three.clear(), listfour.clear(), listfive.clear(), listsix.clear();

或者

listone = [], listtwo = [], three = [], listfour = [], listfive = [], listsix = [];

如何在同一行上设置已经声明的多个变量?

标签: flutterdart

解决方案


使复杂的东西适应更小的空间的最简单方法是使用辅助方法。

clearAll(Iterable<List<Object>> lists) {
  for (var list in lists) list.clear();
}

然后你就写:

clearAll([listone, listtwo, three, listfour, listfive, listsix]);

您可以内联辅助函数

for (var l in [listone, listtwo, three, listfour, listfive, listsix]) l.clear();

但它可能无论如何都不会放在一条线上。

如果您正在设置变量,并且将变量设置为相同的 value,那么您可以将多个赋值作为单个表达式进行:

listone = listtwo = three = listfour = listfive = listsix = [];

不推荐用于列表,因为所有变量都将指向同一个列表对象。null在分配或其他不可变值时效果更好。它也不是特别可读

Dart 中没有简单的方法可以在没有帮助的情况下在单个语句中执行多个表达式。

你可以声明:

void do6(void v1, void v2, void v3, void v4, void v5, void v6) {}
...
do6(listone.clear(), listtwo.clear(), three.clear(), 
    listfour.clear(), listfive.clear(), listsix.clear());

但是您可能会发现它也会被格式化为不止一行

或者,只需使用列表文字而不是函数参数列表来允许多个表达式:

[listone.clear(), listtwo.clear(), three.clear(), 
 listfour.clear(), listfive.clear(), listsix.clear()];

关于长度和格式的相同警告,创建列表然后不使用它是混乱和低效的。

总而言之,请不要试图巧妙地格式化。只需编写惯用代码,您的读者将更容易理解它,并且编译器将更有效。


推荐阅读