Генераторы и «выходят» за пределы браузера - PullRequest
0 голосов
/ 30 октября 2011

Этот фрагмент можно найти здесь , в статье MDN, описывающей генераторы и итераторы в JavaScript.

function simpleGenerator(){  
  yield "first";  
  yield "second";  
  yield "third";  
  for (var i = 0; i < 3; i++)  
    yield i;  
}  

var g = simpleGenerator();  
print(g.next()); // prints "first"  
print(g.next()); // prints "second"  
print(g.next()); // prints "third"  
print(g.next()); // prints 0  
print(g.next()); // prints 1  
print(g.next()); // prints 2  
print(g.next()); // StopIteration is thrown  

Над этим мы читаем:

Ключевое слово yield доступно только для блоков кода в HTML, обернутых в

<script type="application/javascript;version=1.7">

(или более позднюю версию).

Действительно, фрагмент работаетхорошо, если встроен в файл HTML и включен в вышеупомянутый тег.Проблема в том, что я попробовал это в Rhino, и, похоже, он не работает вне HTML и браузера.

Итак, как я могу использовать генераторы вне браузера?

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

https://developer.mozilla.org/en/New_in_Rhino_1.7R1#JavaScript_1.7_features

Чтобы включить поддержку JavaScript 1.7, необходимо установить версию 170 с помощью вызова API Context.setLanguageVersion(). Если вы используете оболочку Rhino, вы можете указать -version 170 в командной строке или вызвать version(170) в коде, выполняемом оболочкой.

0 голосов
/ 09 декабря 2014

Чтобы изменить контекст:

            Context ctx = Context.enter();
            ctx.setLanguageVersion(Context.VERSION_1_7);
            try {

             CompilerEnvirons compEnv = new CompilerEnvirons();
             compEnv.initFromContext(ctx);

             ...

            }
            finally { Context.exit(); }
...