ファーストクラス関数を備えたプログラミング言語がある場合。ジェネレーター関数を共有する場合のセマンティクスはどうあるべきですか?
例えば:
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(); // ??
私は3つのことを想像することができます:
- c == 2、d == 3は、ジェネレーター関数が共有されていることを意味します
- c == 0、d == 2は、値が初期化された新しいジェネレーター関数が作成されることを意味します
- c == 2、d == 2は、ジェネレーターの現在の状態をコピーすることにより、新しいジェネレーター関数が作成されることを意味します
私の意見では、最良の答えは、あるメカニズムまたは別のメカニズムを実行するための最も説得力のある議論を提供するでしょう。多くの場合、先行技術が最も説得力のある議論であることがわかります。