这篇文章给大家介绍如何在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是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法,主要用来做网站开发,许多小型网站都用php开发,因为php是开源的,从而使得php经久不衰。
关于如何在php和C#中实现yield迭代器就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。