2014-04-06 2 views
3

경고를 수집 할 수 있습니까? 그렇지만 경고를 수집 할 수있는 방법이 있습니까?Common Lisp에서 경고를 캡처하고 계속하지만

내 생각에 handler-case을 사용하여 모든 조건을 잡고 경고에서 계속 진행하지만 SimpleWarning은 SBCL에서 continue이 다시없는 것 같습니다.

CL-USER> (handler-case (warn "Nope") (t (c) c)) 
#<SIMPLE-WARNING "Nope" {1008080D53}> 
CL-USER> (compute-restarts (handler-case (warn "Nope") (t (c) c))) 
(#<RESTART SWANK::RETRY {10080867F3}> #<RESTART ABORT {1004710323}> 
#<RESTART ABORT {1004710073}>) 
CL-USER> 
+0

왜 계속 재시작해야합니까? 또한 조건은 '다시 시작'하지 않습니다. –

답변

5

WARN이 실제로 무엇을 조회해야합니까? 기본적으로 경고를 인쇄합니다. 조건 객체에 액세스하려는 경우 처리기를 작성해야합니다. 핸들러에서 돌아 오면 이미 계속됩니다. 인쇄 된 경고를 없애려면 처리기에서 MUFFLE-WARNING으로 전화하십시오. MUFFLE-WARNing은 같은 이름의 재시작을 사용합니다.

CL-USER 32 > (let ((conditions)) 
       (handler-bind ((t (lambda (c) (push c conditions)))) 
       (warn "foo") 
       (warn "bar") 
       (format t "~%baz")) 
       conditions) 
Warning: foo 
Warning: bar 
baz 
(#<SIMPLE-WARNING 402011C9B3> #<SIMPLE-WARNING 402011C63B>) 
5

Handler-case은 조건이 조항 중 하나와 일치 할 때 unwind합니다. handler-bind을 사용해야합니다.

관련 문제