문제

일등석 기능이있는 프로그래밍 언어가있는 경우. 발전기 기능이 공유 될 때 의미론은 무엇입니까?

예를 들어:

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(); // ??

세 가지를 상상할 수 있습니다.

  1. c == 2, d == 3 생성기 함수가 공유됨을 의미합니다.
  2. c == 0, d == 2는 새 생성기 함수가 생성되고 값이 초기화된다는 것을 의미합니다.
  3. 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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top