2016-09-08 2 views
1

현재 Transcrypt를 사용하여 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 

:

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.js를 찾고 있습니다. 그러나 내가 아는 한이 생성자 구조는 스칼라에서는 불가능하며 대응하는 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).

관련 문제