侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

php和C#的yield迭代器实现方法对比分析

2022-07-14 星期四 / 0 评论 / 0 点赞 / 42 阅读 / 2767 字

本文实例讲述了php和C#的yield迭代器实现方法对比。分享给大家供大家参考,具体如下:yield关键字是用来方便实现迭代器的,免去了手工写迭代器的繁琐。迭代器常被用来实现协程,所以大部分的协程中都有yield关键字,

本文实例讲述了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
.

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

广告 广告

评论区