다음 답변은 소금 한 알을 가지고 취해야합니다. 그것은 "The Dylan Reference Manual"의 "Conditions"절에 대한 나의 이해를 바탕으로하지만, Dylan 코드의 한 줄을 작성한 적이 없으며이 섹션보다 더 많은 참조 설명서를 읽지도 않았습니다.
다시 시작 핸들러는 다른 핸들러 내에서 신호를 보내야합니까? 아니면 예외적 인 조건이 감지 된 코드에서 직접 신호를 보낼 수 있습니까? Figure 11-6 of the reference manual에 도시
restart
는
condition
이다. 문법적으로 유효한 문법 인
signal
이있을 때마다
signal
-ed가 될 수 있습니다. 비
restart
조건의 핸들러 (Common Lisp 및 R과 달리)가 아닌
restart
조건의 핸들러를 설치하는 특별한 메커니즘은 없습니다.
restart
핸들러가 다른 핸들러 내에서 -ed
signal
경우
비 restart
상태 신호 대조적으로 restart
신호의 유일한 차이가 있음을, 사 전적으로 signal
-ing 다음 핸들러 코드의 나머지 못해 restart
핸들러가 반환되는 경우에도 실행됩니다. 이 경우 signal
-ed가 restart
인 핸들러의 실행과이 핸들러를 호출 한 핸들러의 실행이 중지되고 restart
핸들러가 리턴 한 값이이 핸들러 각각에 의해 리턴 된 값이됩니다. ("재시작 핸들러가 일부 값을 반환하면 signal은 해당 값을 반환하고 signal을 호출 한 핸들러도이를 반환합니다. 원래 상태를 신호 한 시그널링 장치에서의 신호 호출은 동일한 값을 반환하고 지시 된대로 복구합니다 그 값으로. "Restarts/The Dylan Reference Manual).
restart
처리기가 restart
처리기가 signal
-ed 인 장치 내부 위치를 대상으로 로컬이 아닌 종료를 수행하면 어떻게되는지 알 수 없습니다.
일반 처리기와 달리 재시작 처리기의 추가 값은 무엇입니까? 재시작 핸들러를 모두 사용하지 않으면 (일반 핸들러가 아닌)? 언어의 능력이나 표현력에 차이가 있습니까?
restart
기구는 사실상 그 선택 작업 조건 switch
문이 정의 된 함수의 외부 코드에 의해 동적으로 결정되는 switch
문.restart
신호는 비 restart
조건에 의해 에뮬레이트하지만 restart
메커니즘은 다른 유사한 기능을 달성하기 위해 규칙에 의해 설립되는 것 두 가지 형식적인 기능을 제공 할 수 있습니다
restart
처리기를 가진 후 반환 다른 핸들러 내에서 signal
-되었습니다. 다른 핸들러의 나머지 코드는 자동으로 건너 뛰고 핸들러는 restart
핸들러가 리턴 한 값을 리턴합니다.
restart
조건은 유형별로 공식적으로 식별 할 수 있습니다. restart
유형이 없으면 restart
조건을 식별 할 수있는 것이 바람직한 경우 다른 규칙을 따라야합니다. 디버거의 복구 메뉴에 나열 할 목적으로 ("대화 형 디버거는 다시 시작 처리기를 적용 할 수있는 재시작 신호를 보내고 조건의 복구 프로토콜에서 허용하는 경우 반환 할 수있는 기능을 사용자에게 제공해야합니다. 예를 들어 '복구'메뉴를 사용하여 수행하십시오. "Recovery Protocols/The Dylan Reference Manual