Если у меня есть язык программирования с функциями первого класса. Какова должна быть семантика при совместном использовании функции генератора?Что должно произойти при назначении функции генератора?
Например:
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(); // ??
Я могу представить себе три вещи:
- с == 2, д == 3 означает, что функция генератора совместно
- с == 0, d == 2 означает, что создается новая функция генератора со значениями, инициализированными
- c == 2, d == 2, что означает, что новая функция генератора создается путем копирования текущего состояния генератора
Лучший ответ, на мой взгляд, послужит самым убедительным аргументом для того, чтобы сделать тот или иной механизм. Часто я нахожу, что уровень техники является наиболее убедительным аргументом.
И для бонусных очков, что о разных потоках? – leppie
Различные темы - это самостоятельная проблема. Это также происходит, даже если вы не назначаете генераторы (предполагая, что потоки могут обращаться к тем же переменным). –