aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 17404|回复: 6

实现的一个简单的有状态迭代器

[复制链接]

4

主题

852

回帖

4689

积分

荣誉会员

积分
4689
发表于 2012-4-25 09:37:13 | 显示全部楼层 |阅读模式
本帖最后由 不争 于 2012-4-25 09:44 编辑



each = function(){
   
   
//初始化部分
    var count = 0;
   
   
//返回迭代器(每循环一次,就调用下面的函数)
    return function(){
     
        
//循环执行的代码
        count++
        
        
//判断循环是否结束
        if( count > 10 ){
            
return null; //第一个返回值为空,则终止迭代
        }
        
        
return count,"其他返回值"; //如果第一个返回值不为空,则继续下一次循环
    }
}

//下面测试一下
import console;
for(count,comment in each() ){
    console.log(  count,comment )
}

为什么不直接用简单的循环,要搞这么一个复杂的迭代器呢?
迭代器虽然实现有一点麻烦,但是用起来就方便了,其中一个好处是隐藏了初始化的代码。

如果不使用迭代器,可能先要取到集合对象,然后再循环处理集合。
但是用迭代器就不同了,只是写迭代器的人做好这事就可以了,用户只要直接调用函数即可。

在标准库里就有大量的each前缀的函数,这些函数准备好了所有的事,
我们只要调用他并循环处理结果就行了。


4

主题

852

回帖

4689

积分

荣誉会员

积分
4689
 楼主| 发表于 2012-4-25 09:39:28 | 显示全部楼层


each = function(tab){
   
   
//初始化部分
    //无状态迭代器可以忽略这部分代码
     
   
//返回迭代器(每循环一次,就调用下面的函数)
    return function( prevKey ){
     
        
var k,v = ..table.next(owner,prevKey )
        
return k,v //第一个返回值,总是下一次调用迭代器的参数
        
    },tab
//这里的tab就是迭代器函数的owner对象
}

//下面测试一下
import console;
var array = { "张三";"李四" } ;
for( index,name in each( array ) ){
    console.log(  index,name )
}
上面目的是演示迭代器的原理,实际上遍历table对象并不需要创建自定义的迭代器。
下面这样写就可以了:

for( index,name in array  ){
    console.log(  index,name )
}

4

主题

852

回帖

4689

积分

荣誉会员

积分
4689
 楼主| 发表于 2012-4-25 09:40:14 | 显示全部楼层
参考帮助文档《泛型for与迭代器》
http://www.aardio.com/zh-cn/doc/ ... ments/iterator.html

17

主题

78

回帖

2773

积分

新手入门

积分
2773
发表于 2012-4-25 11:34:17 | 显示全部楼层
这种基础教程非常好,顶!

12

主题

188

回帖

1249

积分

荣誉会员

积分
1249
QQ
发表于 2012-4-25 13:51:34 | 显示全部楼层
  楼主讲解的非常详细 支持 再版 更新!

1

主题

31

回帖

192

积分

一级会员

积分
192
发表于 2012-6-1 14:53:47 | 显示全部楼层
非常详细

0

主题

5

回帖

155

积分

一级会员

积分
155
发表于 2014-6-10 10:40:48 | 显示全部楼层
受教了! 谢谢~!
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-2-13 09:23 , Processed in 0.077435 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表