我刚刚看了this introduction from the Dart Summit。在谈话中,这段代码是这样写的:

=> new List.generate(100, (y) => renderLine(y));

我很确定我理解那条线。箭头功能对我来说是新功能,但是没关系-看起来有点咖啡风格。但是,要点是将此函数更改为并行运行,如下所示:
=> Parallel.run(new List.generate(100, (y) => () => renderLine(y)));

有人可以解释(y) => () => renderLine(y)的语法吗?

最佳答案

(y) => () => renderLine(y)是一个返回函数的函数。如果您编写时没有=>速记,则它与以下内容相同:

(y) {
  return () {
    return renderLine(y);
  };
}

这意味着List.generate会使用100个不同的y值调用此函数100次。每次调用都会返回一个函数,该函数将使用不同的值调用renderLine

这将生成一个函数列表(每个函数都有零个参数)。
该列表是Parallel.run的参数。

因此,代码只是使用一种快速的内联方式来创建列表,但是它等效于:

var tempList = [];
for (int y = 0; y < 100; y++) tempList.add(() => renderLine(y));
Parallel.run(tempList);
Parallel.run函数需要一个函数列表,并将并行运行这些函数,因此您将获得100个并行执行的renderLine调用,每个调用都有不同的参数。

09-25 15:49