GnuSmalltalkUsersGuide:BaseChapter 041

From 흡혈양파의 번역工房
Jump to navigation Jump to search
Continuation

Continuation

네임스페이스 Smalltalk에 정의됨

슈퍼클래스: Object

범주: 언어-구현


나의 내부는 goto 명령어와 같다; 나의 생성이 레이블(label)을 설정하면 나의 메서드들은 실행을 한다. 하지만 이것은 매우 강력한 goto 명령어이다. 이 시점에서 걱정이 되겠지만 개념 자체보다는 연속의 사용자만 다룰 것이므로 염려하지 말길 바란다.


Continuation 클래스: 인스턴스 생성

current

continuation을 리턴하라.

currentDo: aBlock

continuation을 1 인자(one-argument) 블록, aBlock로 전달하고, 그것을 평가한 결과를 리턴하라.

escapeDo: aBlock

aBlock이 떨어지지 않음을 인식하고 continuation을 1 인자(one-argument) 블록에 전달하라 (메서드 리턴을 포함하거나, 다른 continuation으로 제어를 양도하기 때문에). 전달할 경우 예외가 신호로 전달되고, 현재 프로세스가 종료될 것이다.


Continuation: 호출

callCC

본래 continuation을 활성화하고 호출자에 대한 continuation를 다시 전달하라. 호출된 continuation는 불안정해지며, 이의 재활성화를 시도 시 모두 예외를 야기할 것이다. 해당 메서드는 하나의 continuation를 다른 continuation로 대체하는 데 사용되기 때문에 일반적으로는 제약이 아니다 (Generator 클래스의 구현 참고).

oneShotValue

본래 continuation로 nil을 리턴하여 불안정해진다. 이의 재활성화를 시도 시 예외를 야기할 것이다. 이는 #value에 대한 최적화이다.

oneShotValue: v

본래 continuation로 anObject를 리턴하여 불안정해진다. 이의 재활성화를 시도 시 예외를 야기할 것이다. 이는 #value:에 대한 최적화이다.

value

본래 continuation으로 nil을 리턴하여 또 다른 활성화를 허용하기 위해 스택을 복사하라.

value: anObject

본래 continuation으로 anObject를 리턴하여 또 다른 활성화를 허용하기 위해 스택을 복사하라.

valueWithArguments: aCollection

aCollection의 유일한 요소를 본래 continuation으로 리턴하여 (aCollection이 빈 경우 nil을 리턴) 또 다른 활성화를 허용하기 위해 스택을 복사하라.


Notes