В настоящее время я использую Transcrypt для генерации кода Javascript из кода Python. Таким образом, я в состоянии реализовать генераторы в Python, как:Генераторы Javascript в Scala.js
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, если я этого хочу?
Сверху моей головы вы можете взглянуть на https://github.com/scala/async для перевода кода генераторов –
Вы можете определить '' color'' следующим образом: '' color = itertools.cycle (["красный", "синий"]). –
Я хотел бы использовать полные возможности генератора, например, отправлять ему значения. Пример слишком прост. –