발전기 함수가 할당되면 어떻게해야합니까? [닫은
문제
일등석 기능이있는 프로그래밍 언어가있는 경우. 발전기 기능이 공유 될 때 의미론은 무엇입니까?
예를 들어:
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을 원합니다.
이것이 생성되는 파이썬에서 일어나는 일입니다 ~이다 대상 및 할당 ~이다 참조 할당 (발전기를 호출하는 대신 다음 값을 검색하기 위해 .next ()를 호출하더라도).
다음은 이것이 파이썬에서 어떻게 행동하는지 간단한 데모입니다.
>>> 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