我一直在熟悉 Koa(http://koajs.com/)。许多示例使用星号代替函数名。例如,在 hello world 示例中有:
var koa = require('koa');
var app = koa();
app.use(function *(){
this.body = 'Hello World';
});
app.listen(3000);
这颗星是什么意思?
我一直在熟悉 Koa(http://koajs.com/)。许多示例使用星号代替函数名。例如,在 hello world 示例中有:
var koa = require('koa');
var app = koa();
app.use(function *(){
this.body = 'Hello World';
});
app.listen(3000);
这颗星是什么意思?
它通常会创建一个“迭代器”,因此您可以一次产生一个结果。
类似于C#的yield key工作。
例子
斐波那契数列的“无限”序列(尽管行为在 2^53 附近):
function* fibonacci() {
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
生成器可以在循环中迭代:
for (n of fibonacci()) {
// truncate the sequence at 1000
if (n > 1000)
break;
print(n);
}
生成器是迭代器:
let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8