产量和静态局部变量的比较

本文关键字:比较 局部变量 静态 | 更新日期: 2023-09-27 18:25:39

在阅读C#中的yield关键字时,我突然想到,它似乎与在函数内部声明的静态变量的使用有一些相似之处,比如可以在C中完成。

两者都是在调用之间保存函数状态的方法,而不会在函数外部暴露这一事实。

第一个问题:在如何保存函数的状态方面,两者有什么区别?

第二个问题:像这样不透明地保存函数状态的设计含义是什么?我见过一些基于收益率的"黑客",这似乎是一场等待发生的灾难。除了可枚举集合之外,还有其他情况可以从这种设计中受益吗?

产量和静态局部变量的比较

C#yield看起来非常像Python中的yield。如果因此,它更接近于协同过程,而不是静态变量:保存函数的整个状态。(回到过去,我们在英特尔上实现协同进程的方式是具有存储器位置的堆栈指针:xchg sp, otherCoprocessStack。)

至于优点,它比定义一个单独的线程,并通过一些某种排队机制。当对复杂的内存结构(如树)进行迭代,因为避免了必须手动维护堆栈。