2014-01-06 3 views
0

재시작 핸들러는 다른 핸들러 내에서 signal -ed가되어야합니까 아니면 예외 상황이 감지 된 코드에 의해 signal이 될 수 있습니까?재시작 핸들러의 핵심은 무엇입니까?

처리기 내에서 signal -ed가되어야하는 경우 왜 그렇습니까? 그것은 불필요한 추가 단계처럼 보입니다.

정규 핸들러가 아닌 재시작 핸들러의 추가 값은 무엇입니까? 재시작 핸들러를 모두 사용하지 않으면 (일반 핸들러가 아닌)? 언어의 능력이나 표현력에 차이가 있습니까?

답변

1

다음 답변은 소금 한 알을 가지고 취해야합니다. 그것은 "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 메커니즘은 다른 유사한 기능을 달성하기 위해 규칙에 의해 설립되는 것 두 가지 형식적인 기능을 제공 할 수 있습니다

  1. restart 처리기를 가진 후 반환 다른 핸들러 내에서 signal-되었습니다. 다른 핸들러의 나머지 코드는 자동으로 건너 뛰고 핸들러는 restart 핸들러가 리턴 한 값을 리턴합니다.
  2. restart 조건은 유형별로 공식적으로 식별 할 수 있습니다. restart 유형이 없으면 restart 조건을 식별 할 수있는 것이 바람직한 경우 다른 규칙을 따라야합니다. 디버거의 복구 메뉴에 나열 할 목적으로 ("대화 형 디버거는 다시 시작 처리기를 적용 할 수있는 재시작 신호를 보내고 조건의 복구 프로토콜에서 허용하는 경우 반환 할 수있는 기능을 사용자에게 제공해야합니다. 예를 들어 '복구'메뉴를 사용하여 수행하십시오. "Recovery Protocols/The Dylan Reference Manual
관련 문제