GnuSmalltalkUsersGuide:BaseChapter 041

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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