2016-09-08 2 views
1

В настоящее время я использую 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, если я этого хочу?

+0

Сверху моей головы вы можете взглянуть на https://github.com/scala/async для перевода кода генераторов –

+0

Вы можете определить '' color'' следующим образом: '' color = itertools.cycle (["красный", "синий"]). –

+0

Я хотел бы использовать полные возможности генератора, например, отправлять ему значения. Пример слишком прост. –

ответ

1

Я считаю, что общая концепция, которую вы ищете, - это продолжение. Это довольно большая и сложная тема для себя - о них говорили больше, но в значительной степени вытеснили более легкую в использовании асинхронную библиотеку. Но scala-continuations library все еще вокруг, и обсуждали различные места онлайн - например, this article, или this one.

Смежные вопросы