分配发电机功能时会发生什么? [关闭]
题
如果我有一个具有一流功能的编程语言。当共享生成器函数时,语义应该是什么?
例如:
var f = function() {
foreach (i in 0..42)
yield i;
}
int a = f(); // 0
int b = f(); // 1
// Assigning the generator function
var g = f;
int c = g(); // ??
int d = f(); // ??
我可以想象三件事:
- c == 2,d == 3表示生成器功能是共享的
- c == 0,d == 2表示创建了一个新的生成器函数,其值已初始化
- c == 2,d == 2表示通过复制发电机的当前状态创建新的发电机功能 醇>
在我看来,最好的答案将提供最有说服力的论据来做一个或另一个机制。我经常发现现有技术是最有说服力的论点。
解决方案
如果您的语言中有引用语义,并且赋值通常是引用赋值,那么您需要选项1.
这是在Python中发生的情况,其中生成是对象,并且赋值是引用赋值(即使您调用.next()来检索下一个值,而不是而不是“调用”发电机)。
以下简要演示了Python中的行为:
>>> def gen():
... for i in range(42):
... yield i
...
>>> f = gen().next
>>> a = f()
>>> b = f()
>>> g = f
>>> c = g()
>>> d = f()
>>> a, b, c, d
(0, 1, 2, 3)
不隶属于 StackOverflow