几个语言中的迭代器

上次有朋友说python的迭代器很好用,就是不好理解,我说其实php也有迭代器的,只是很多人不知道而已。

python迭代器:

先说说python的迭代器,python的迭代器使用yield关键字来实现,可以被for调用。

还是来拿读文件来说事,我们有一个文件,里面的数据都是TAB分隔,如果我们想实现一个一行行读取的库核心的地方可以使用迭代器来写:

tab文件(html输出后估计tab变成了空格,复制的同学请注意):

迭代器代码:

这里涉及迭代器的部分在于read方法中的yield迭代器,虽然是for循环,在yield调用一次以后会挂起等待下一次调用yield,所以很多人在这里需要理解很久。所以yield在while内自然也是一样的效果。

ruby迭代器:

ruby的迭代器基本上和python一样使用yield关键字,可以直接被块语句调用:

当然块语句有很多有意思的地方,这个可以参考ruby的手册。 python应该也是可以写出类似的语句的。

php迭代器:

php的迭代器是一个接口,只要继承并实现对应的方法,就可以实现迭代器。迭代器可以被foreach语句调用,行为和数组相似。以下是需要实现的方法:

要注意的是迭代器是先执行next,然后执行valid,如果valid检查有返回false就停止了,在valid后面才是current,这时才会获取到迭代的值。

下面是php版本的读文件例子:

更少的封装,面向对象,代码明显多了很多,不过更容易理解了。

php迭代器文档地址:http://php.net/manual/zh/class.iterator.php

php spl还自带了很多迭代器,可以参考这里:http://php.net/manual/zh/spl.iterators.php

几个语言中的迭代器》上有5条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注