【发布时间】:2010-12-09 18:47:16
【问题描述】:
如果我有一种具有一流功能的编程语言。共享生成器函数时的语义应该是什么?
例如:
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 表示通过复制生成器的当前状态来创建新的生成器函数
在我看来,最好的答案是提供最有说服力的论据来执行一种或另一种机制。我经常发现现有技术是最有说服力的论据。
【问题讨论】:
-
对于奖励积分,不同的线程呢?
-
不同的线程是一个独立的问题。即使您不分配生成器也会发生这种情况(假设线程可以访问相同的变量)。
标签: language-agnostic programming-languages generator semantics language-design