zoukankan      html  css  js  c++  java
  • yield,生成器

    1.生成器函数:

    function *generator(){ yeild "hello world" }

    以*号声明的函数为生成器函数

    2.调用生成器函数会生成一个迭代器对象,通过迭代器对象的next 方法调用一个生成器。

    var iterator = generator()

    iterator.next()

    1)调用next方法的时候,生成器开始执行,遇到yeild关键字将会生成一个值(拥有value和done字段,当done字段为true时,则表示生成器已执行完毕)并挂起生成器的执行。

    2)当调用下一个next方法的时候,生成器会从上一次挂起的地方开始继续执行,直到遇到下一个yeild,或者遇到return已经函数执行完毕

    3)调用next方法时可以向生成器传递参数,若此时生成器为挂起状态,则参数将作为yeild关键字后面的表达式的值(第一次调用next时,生成器为非挂起状态,所以不能作为yeild后面表达式的值)

    代码如下:

    1 function *generator(val){    
    2     val = yield val * 2
    3     yield val
    4 }
    5 
    6 var iterator = generator(2)     //调用迭代器generator, 生成一个迭代器并让iterator变量进行引用,此时向生成器传递了一个为2的参数,所以val的值为2            
    7 var result1 = iterator.next(3).value //第一次调用迭代器的next方法,生成器从第二行开始执行,计算val * 2的值(此时val的值为2,因为此时生成器并未挂起,所以next方法传递的参数将被丢弃),遇到yield关键字,将计算所得的值返回,并且生成器挂起,此时result1的值为 4
    8 var result2 = iterator.next(5).value //第二次调用next方法,生成器从上次一挂起的位置继续执行(即第二行)此时next方法传递了参数5,因为此时生成器的状态为挂起状态,所以5将作为第二行yield关键字后面表达式的值,即 val * 2 = 5, 并将值赋值给 val变量,代码继续执行,到了第三行遇到yield关键字,将val变量的值返回(val的值为5),生成器执行完毕。
  • 相关阅读:
    Intellij IDEA创建Maven Web项目<转>
    Spring事件监听Demo
    maven打包源码<转>
    枚举类转成json
    Java多线程编程中Future模式的详解<转>
    细数JDK里的设计模式<转>
    设计模式-观察者模式(下)<转>
    Sqlserver自定义函数Function
    sqlSQL2008如何创建定时作业
    JSON 序列化和反序列化——JavaScriptSerializer实现
  • 原文地址:https://www.cnblogs.com/lyc10/p/13222548.html
Copyright © 2011-2022 走看看