Parallel.run语法

时间:2015-05-12 13:54:04

标签: javascript dart

我刚看了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)的语法吗?

3 个答案:

答案 0 :(得分:3)

(y) => () => renderLine(y)是一个返回函数的函数。如果您在没有=>简写的情况下编写它,则它与:

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

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

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

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

var tempList = [];
for (int y = 0; y < 100; y++) tempList.add(() => renderLine(y));
Parallel.run(tempList);

Parallel.run函数需要一个函数列表,并且将并行运行函数,因此您可以并行执行100次renderLine调用,每次调用都有不同的参数。

答案 1 :(得分:0)

(y) => () => renderLine()是一个函数,它作为第二个参数传递给Parallel.run(),这个函数接受一个参数并返回一个不带任何参数的函数。

我不知道为什么这样做。

(x, y) => x + y;只是(x, y) { return x + y; }

的简写

答案 2 :(得分:0)

我猜测(尚未观看视频)Parallel.run()函数接收并行运行的无参数函数列表(或可迭代)。 List.generate()构造函数采用int(长度)和函数(以int作为参数)并通过调用每个int的函数来生成那么多项。范围0 .. n-1。因此,代码new List.generate(100, (y) => renderLine(y))会生成包含100个项目的List,每个项目都是在每个索引上调用renderLine()的结果(即renderLine(0), renderLine(1), ... , renderLine(99))。

代码new List.generate(100, (y) => () => renderLine(y))返回一个包含100个项目的列表,其中aech是一个不带任何争论的函数,在调用时,调用renderLine()及其索引在列表中。也就是说,列表是:() => renderLine(0), () => renderLine(1), () => renderLine(2), ..., () => renderLine(99)

我猜Parallel.run()然后并行运行所有这些函数,可能在列表中聚合结果并返回它?如果是这样,则代码Parallel.run(new List.generate(100, (y) => () => renderLine(y)))执行与new List.generate(100, (y) => () => renderLine(y))类似的操作,除非是并行而不是顺序。