目前我使用 Transcrypt 从 Python 代码生成 Javascript 代码。通过这种方式,我可以在 Python 中实现生成器,例如:
def color():
colors = ["red", "blue", "yellow"]
i = -1
while True:
i += 1
if i >= colors.length:
i = 0
reset = yield colors[i]
if reset:
i = -1
gen = color()
console.log(next(gen)) # red
console.log(gen.js_next(True).value) # red
console.log(next(gen)) # blue
console.log(next(gen)) # yellow
console.log(next(gen)) # red
它将被编译为 Javascript,如:
var color = function* () {
var colors = list (['red', 'blue', 'yellow']);
var i = -(1);
while (true) {
i++;
if (i >= colors.length) {
var i = 0;
}
var reset = yield colors [i];
if (reset) {
var i = -(1);
}
}
};
var gen = color ();
console.log (py_next (gen));
console.log (gen.next (true).value);
console.log (py_next (gen));
console.log (py_next (gen));
console.log (py_next (gen));
但因为我也有 Scala 知识(以及我想在浏览器中实现的 Scala 应用程序),所以我正在寻找 Scala.js。但据我所知,这种生成器构造在 Scala 中是不可能的,并且相应的yield
关键字以不同的方式使用。
Scala.js 中的生成器语法是否可行,或者如果我想要的话,我是否被迫使用 Python 和 Transcrypt?