2016-09-08 13 views
1

現在、私はTranscryptを使用してPythonコードからJavascriptコードを生成しています。このように、私は次のようにPythonでジェネレータを実装することができるよ:Scala.jsのJavascriptジェネレータ

のようなJavaScriptにコンパイルされます
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 

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 (["red"、 "blue"]) ''となります。 –

+0

私はジェネレータに値を送るのと同じように、ジェネレータのすべての可能性を利用したいと思います。この例はあまりにも単純です。 –

答えて

1

あなたが探している一般的なコンセプトはContinuationsです。以前はもっと話題になっていましたが、使いやすい非同期ライブラリに代わって大部分を占めていました。しかし、scala-continuations libraryは依然として周りであり、さまざまな場所でオンラインで議論されています(たとえば、this article、またはthis one)。

関連する問題