我刚刚看了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
调用,每个调用都有不同的参数。