Flutter Dart多个函数调用/在一行上设置所有变量

Flutter Dart多个函数调用/在一行上设置所有变量,flutter,dart,Flutter,Dart,我需要在函数开始时清除一些列表,否则它们会随着add方法越来越大,因此我可以使用=[]或.clear来实现这一点,但格式将它们放在单独的行上,如下所示: listone.clear(); listtwo.clear(); three.clear(); listfour.clear(); listfive.clear(); listsix.clear(); 我想做这样的事情,但它不允许: listone.clear,listwo.clear,3.clear,listfour.clear,list

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

listone.clear();
listtwo.clear();
three.clear();
listfour.clear();
listfive.clear();
listsix.clear();
我想做这样的事情,但它不允许:

listone.clear,listwo.clear,3.clear,listfour.clear,listfive.clear,listsix.clear

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


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

这是您可以做的

void main() {
  var listone = [1, 2], listtwo = [1, 1, 1], listthree = [0, 0, 1];

  [listone, listtwo, listthree].forEach((l) => l.clear());

  print(listone);
  print(listtwo);
  print(listthree);
}
查看

注意:后面不应该有像[x,y,z,/*这个*/]这样的逗号,否则dartfmt将把它带到下一行

编辑:

此外,如果在多个文件中使用相同的内容,则

放入一个全局文件

clearList(List list)=>list.clear();
打电话给

[listone, listtwo, listthree].forEach(clearList);

这就是你能做的

void main() {
  var listone = [1, 2], listtwo = [1, 1, 1], listthree = [0, 0, 1];

  [listone, listtwo, listthree].forEach((l) => l.clear());

  print(listone);
  print(listtwo);
  print(listthree);
}
查看

注意:后面不应该有像[x,y,z,/*这个*/]这样的逗号,否则dartfmt将把它带到下一行

编辑:

此外,如果在多个文件中使用相同的内容,则

放入一个全局文件

clearList(List list)=>list.clear();
打电话给

[listone, listtwo, listthree].forEach(clearList);

使复杂的事物适应更少空间的最简单方法是使用辅助方法

clearAll(Iterable<List<Object>> lists) {
  for (var list in lists) list.clear();
}
您可以内联helper函数

for (var l in [listone, listtwo, three, listfour, listfive, listsix]) l.clear();
但无论如何,它可能不适合一条线

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

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()];
关于长度和格式也有同样的警告,创建列表然后不使用会造成混乱和效率低下


总之,请不要试图巧妙地设置格式。只需编写惯用代码,读者就可以更容易地理解它,而且编译器也会更高效。

让复杂的东西在更少的空间中适应的最简单的方法是使用helper方法

clearAll(Iterable<List<Object>> lists) {
  for (var list in lists) list.clear();
}
您可以内联helper函数

for (var l in [listone, listtwo, three, listfour, listfive, listsix]) l.clear();
但无论如何,它可能不适合一条线

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

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()];
关于长度和格式也有同样的警告,创建列表然后不使用会造成混乱和效率低下


总之,请不要试图巧妙地设置格式。只需编写惯用代码,您的读者就可以更容易地理解它,而且编译器的效率也会更高。

这个答案很好,而且似乎工作得很好。至少有人真的花时间读了这个问题……不像其他无用的答案。你觉得第一种方法很麻烦吗?为什么每次都是.l=>l.clear执行相同的操作假设您想更改清除列表的方法,也许您希望在清除列表之前获得列表数据。如果您使用第一种方法,那么祝您好运,找到并替换所有呼叫。在第二种方法中,你改变了全局函数,你就完成了。不管怎么说,这是一个很好的答案。这个答案很好,似乎工作得很完美。至少有人真的花时间读了这个问题……不像其他无用的答案。你觉得第一种方法很麻烦吗?为什么每次都是.l=>l.clear执行相同的操作假设您想更改清除列表的方法,也许您希望在清除列表之前获得列表数据。如果您使用第一种方法,那么祝您好运,找到并替换所有呼叫。在第二种方法中,你改变了全局函数,你就完成了。不管怎样,这是一个很好的答案。你能说一下为什么你想让操作在一条线上吗?为什么真的很重要吗?只要有可能,我都会尝试以类似的方式来节省空间。不管出于什么原因,这都会让人更满意。@MostHated是的,这是一个可怕的问题
他问道。当他们可以把代码放在一行上时,没有人想要一个长的代码块,除非它会使代码变得不可读,但这里显然不是这样。你能说一下为什么你想把操作放在一行上吗?为什么真的很重要吗?只要有可能,我都会尝试以类似的方式来节省空间。不管出于什么原因,这都会让人更满意。@MostHated是的,他问了一个可怕的问题。没有人想要一个长的代码块,当他们可以把它放在一行,除非它会使它不可读,但显然不是这样。有趣的想法。我试过你的最后一种方法[listone.clear,list2.clear,3.clear,listfour.clear,listfive.clear,listsix.clear];vscode在它下面加了下划线,并说“避免使用不必要的语句”。不确定这是怎么回事。listone=listtwo=three=listfour=listfive=listsix=[];然后是listone.add10;修改每个列表。如何防止这种情况发生?您的第一种方法似乎是最具可读性的方法,也是最好的方法+1因此,如果使用多个赋值,则无法避免所有列表都是相同的列表值。好的一点是,这可能不是OP想要的。我看到a=b=c=d=null可以工作,即使a、b、c和d有不同的类型。这是一个安全的选择吗?有趣的想法。我试过你的最后一种方法[listone.clear,list2.clear,3.clear,listfour.clear,listfive.clear,listsix.clear];vscode在它下面加了下划线,并说“避免使用不必要的语句”。不确定这是怎么回事。listone=listtwo=three=listfour=listfive=listsix=[];然后是listone.add10;修改每个列表。如何防止这种情况发生?您的第一种方法似乎是最具可读性的方法,也是最好的方法+1因此,如果使用多个赋值,则无法避免所有列表都是相同的列表值。好的一点是,这可能不是OP想要的。我看到a=b=c=d=null可以工作,即使a、b、c和d有不同的类型。这种多重分配是一种安全的选择吗?