php和C#的yield迭代器实现方法对比分析
发布:smiling 来源: PHP粉丝网 添加日期:2021-12-04 20:44:31 浏览: 评论:0
本文实例讲述了php和C#的yield迭代器实现方法对比,分享给大家供大家参考,具体如下:
yield关键字是用来方便实现迭代器的,免去了手工写迭代器的繁琐,迭代器常被用来实现协程,所以大部分的协程中都有yield关键字,可以参看unity3D的协程。
C#版本:
函数的返回类型必须为 IEnumerable、IEnumerable<T>、IEnumerator 或 IEnumerator<T>。
IEnumerable表示一个类可以迭代,也就是可以用foreach遍历,IEnumerator是真正的迭代器实现,IEnumerable和IEnumerator一个是使用迭代器的接口,一个是实现迭代器的接口。
C#是怎么用yield实现迭代器的呢?其实是编译器根据yield关键字生成了内部类,反编译一下就可以看到。
- using System.Collections;
- class Program
- {
- //返回IEnumerable接口,其实返回了编译器生成的内部类
- public static IEnumerable fib(int n)
- {
- int cur = 1;
- int prev = 0;
- for (int i = 0; i < n; i++)
- {
- yield return cur;
- int temp = cur;
- cur = prev + cur;
- prev = temp;
- }
- }
- static void Main()
- {
- // Display powers of 2 up to the exponent 8:
- foreach (int i in fib(9))
- {
- Console.Write("{0} ", i);
- }
- }
- }
- // prints: 1 1 2 3 5 8 13 21 34
php版本:
函数返回类Generator,而类Generator实现了迭代器接口Iterator。
- <?php
- //返回Iterator接口,php解释器帮我们返回了Generator类
- function fib($n)
- {
- $cur = 1;
- $prev = 0;
- for ($i = 0; $i < $n; $i++) {
- yield $cur;
- $temp = $cur;
- $cur = $prev + $cur;
- $prev = $temp;
- }
- }
- $fibs = fib(9);
- foreach ($fibs as $fib) {
- echo " " . $fib;
- }
- // prints: 1 1 2 3 5 8 13 21 34
Tags: C yield php迭代器
- 上一篇:php基于协程实现异步的方法分析
- 下一篇:php命名空间设计思想、用法与缺点分析
相关文章
- ·PHP中通过Web 执行C/C++应用程序(2013-11-13)
- ·FastCGI 不完全高级指南(PHP版,Windows平台)(2013-11-28)
- ·PHP require/include顺序详解(2013-11-29)
- ·CentOS系统下Apache环境安装GBK编码程序网页乱码问题(2013-11-30)
- ·XSLTProcessor 中 registerPHPFunctions 后无法调用 php 函数(2013-11-30)
- ·php curl常见错误:SSL错误、bool(false)(2013-11-30)
- ·mysql_connect提示"No such file or directory"错误"(2013-12-04)
- ·淘宝API返回的json数据无法用json_decode的问题(2013-12-05)
- ·php memcached 扩展 timeout 问题(2013-12-06)
- ·php中json_encode格式中文问题解决方法(2013-12-06)
- ·hp在IIS下和apache下urlrewrite返回不同的REQUEST_URI解决办法(2013-12-06)
- ·curl out of memory window下PHP调用curl报内存不够(2013-12-06)
- ·windows 下 php curl 的支持配置方法(2013-12-06)
- ·PHP Fatal error: Call to undefined function bcmul()(2013-12-07)
- ·PHP生成CSV文件用Excel打开乱码问题(2013-12-07)
- ·php中Memcached连接超时问题解决办法(2013-12-07)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)