阅读MDN生成器的文档后,我想到了一个简单的实验:
var nodes = {
type: 'root',
value: [
{ type: 'char', value: 'a' },
{ type: 'char', value: 'b' },
{ type: 'char', value: 'c' },
],
};
function* recursiveGenerator(node) {
if (node.type === 'root') {
node.value.forEach(function (subnode) {
for (var suffix of recursiveGenerator(subnode)) {
yield suffix;
}
});
}
else {
yield node.value;
}
}
for (generated of recursiveGenerator(nodes)) {
console.log(generated);
}
在--harmony
设置了标志的node.js v0.11.9上运行它会产生以下错误:
alix@900X4C:~$ node --version
v0.11.9
alix@900X4C:~$ node --harmony test.js
/home/alix/test.js:14
yield suffix;
^^^^^^
SyntaxError: Unexpected identifier
我也尝试使用for ... in ...
and let
关键字代替var
,但是没有成功。
我不明白到底yield*
是什么,但是如果我在for
循环中使用它,我会得到:
alix@900X4C:~$ node --harmony test.js
/home/alix/test.js:14
yield* suffix;
^
ReferenceError: yield is not defined
如果我用console.log()
输出替换for中的收益a
,则b
和c
。我究竟做错了什么?
这是一个简约的生成器,显示node.js知道如何处理生成器:
function* alpha() {
yield 'a';
yield 'b';
yield 'c';
}
for (var suffix of alpha()) {
console.log(suffix);
}
输出:
alix@900X4C:~$ node --harmony y.js
a
b
c
function* recursiveGenerator(node) {
if (node.type === 'root') {
for (var i = 0; i < node.value.length; ++i) {
var subnode = node.value[i];
for (var suffix of recursiveGenerator(subnode)) {
yield suffix;
}
}
}
else {
yield node.value;
}
}
for (generated of recursiveGenerator(nodes)) {
console.log(generated);
}
总结注释:不能yield
在 常规 函数中使用,因此不能yield
与一起使用forEach
。这里是“生成的” foreach的示例:
function * foreach (arr, fn) {
var i
for (i = 0; i < arr.length; i++) {
yield * fn(arr[i])
}
}
function * gen (number) {
yield number + 1
yield number + 2
yield number + 3
}
function * other () {
yield * foreach([1, 2, 3], gen)
}
for (var i of other()) {
console.log(i)
}
更新 也可以使用这样的助手很好地解决原始问题:
var nodes = {
type: 'root',
value: [
{ type: 'char', value: 'a' },
{ type: 'char', value: 'b' },
{ type: 'root', value: [
{ type: 'char', value: 'c' },
{ type: 'char', value: 'd' },
{ type: 'char', value: 'e' },
]
},
],
}
function * foreach (arr, fn) {
var i
for (i = 0; i < arr.length; i++) {
yield * fn(arr[i])
}
}
function * value (val) {
yield val
}
function * recursiveGenerator(node) {
yield * node.type === 'root' ? foreach(node.value, recursiveGenerator) : value(node.value)
}
for (var generated of recursiveGenerator(nodes)) {
console.log(generated);
}
因此,发电机本身变成了单线!
在jQuery-UI自动完成时,我得到了一个我不理解的SyntaxError。 下面是我的代码: PHP jQuery 自动完成与我的数据库的每一列工作,但不是与“tinytext”类型的“面额”一个。 我只有带有特殊字符(-、#..)的文本 有人知道它为什么不起作用吗? 谢谢
问题内容: 对于个人项目,我正在尝试使用ES6 import编写更简洁的代码。作为第一个测试,我正在编写一个应生成菜单的对象。当我直接加载类时,整个代码都在工作,但是在ES6中使用导入和导出时,它在以下行中给出了“未捕获的SyntaxError:意外的标识符”错误 我有以下文件: 资产/js/menu.module.js 资产/js/main.js index.html 请注意,这些只是相关的代码
问题内容: 我刚刚在计算机上安装了MySQL,当我尝试从MySQL Shell创建数据库时,出现此错误: 有人知道为什么会这样吗?MySQL的安装有问题吗? 问题答案: 通过在这里查看该线程,您似乎可以在js模式下使用shell,您可以通过使用switch来将其关闭 https://forums.mysql.com/read.php?10,661192,661203#msg-661203
问题出现在(bot)中。这部分代码:
When considering portability between databases, another important decision is selecting the identifier generation stratagy you want to use. Originally Hibernate provided the native generator for this
我正在尝试用我的网页包项目设置Jest。当我运行测试时,Jest抱怨它无法读取es6代码。巴贝尔似乎没有转换我的测试文件。 我尝试过在互联网上找到的各种解决方案,但我仍然感到困惑。也许有人有更多的巴别塔/网页包知识,可以看看我的配置,帮助我。 相关package.json脚本: 有关package.json: 配置/webpack.config.js: config/jest.config.js