Я пытаюсь создать код, который оценивает выражение и возвращает ошибку как строку для ошибки:
(cond-expand
(gambit)
(gauche)
(kawa)
(guile
(import (rnrs base)
(rnrs exceptions)
(rnrs conditions))
(define (error-object-message cond)
(condition-message cond))))
(define (evaluate expr env)
(call-with-current-continuation
(lambda (exit)
(with-exception-handler
(lambda (e)
(exit (error-object-message e)))
(lambda ()
(eval expr env))))))
;; trigger error
(display (evaluate 'xxx (interaction-environment)))
(newline)
у меня есть
- Сообщение Guile
Unbound variable: ~S
как получить фактическое сообщение об ошибке, а не шаблон? - Кава исключение:
Argument #1 'unbound location: xxx' to 'error-object-message' has wrong type (gnu.mapping.UnboundLocationException) (gnu.mapping.UnboundLocationException cannot be cast to kawa.lang.NamedException)
- Дамп ядра Гоша
- Гамбит зависает
ПРИМЕЧАНИЕ: это часть REPL, которую я тестирую во всех реализациях Scheme, которые есть в моей системе. Он почти работает, он может работать сам по себе, но я хотел бы показывать правильное сообщение об ошибке, когда происходит исключение, вместо выхода из REPL.