> 1 <

Автор Сообщение

Яков Замир Кацман (нью)

Members


Статус

22 сообщений

Где: Russia
Род занятий:
Возраст:

#7800   2017-11-18 20:53 GMT+3 часа(ов)      
;; *return контролирующий типы*
;; Значения некорректного типа
;; вызывают исключительную ситуацию ("тип не найден"),
;; которая обрабатывается (бросается error exception)
;; и выполнение продолжается после корректировки return-zero
;; вызванного invoke-restart
;; (L) J.Z.Katsman (2017) list.development@gmail.com | jzkatsman @ jabber.ru
 
(define-condition foo_cond (error)
((message :initarg :message :reader message))
)
(defun filterObjects (listObjects)
(dolist (obj listObjects)( format t " [Work Test] Success ~S ~%" (filterItemObject obj) ))
)
(defun filterItemObject(i)
;; тут происходит что-то дейтвительно интересное
;; ...
 
;; ...
;; это наш return (return контролирующий типы)
(restart-case
(typecase i
(number i)
(t (error 'foo_cond :message i))
)
 
( controlf ( x )
( progn
( setq values
'(
( "one" . 1 )
( "two" . 2 )
( "three" . 3 )
( "four" . 4 )
( "five" . 5 )
( "six" . 6 )
( "seven" . 7 )
( "eight" . 8 )
( "nine" . 9 )
)
)
( setq s (cdr (assoc x values :test #'equal)))
( if s s 888 )
))
)
)
 
(handler-bind
(
(foo_cond
#'(lambda (c)
(format t "<Error Message> signaled about incorrect parameter ~a ~%"
(message c))
(invoke-restart 'controlf (message c))
)
)
)
(filterObjects '(1 2 "000" 4 "five" 6 7 "eight"))
)
 
 
;;[Work Test] Success 1
;;[Work Test] Success 2
;;<Error Message> signaled about incorrect parameter 000
;; [Work Test] Success 888
;; [Work Test] Success 4
;;<Error Message> signaled about incorrect parameter five
;; [Work Test] Success 5
;; [Work Test] Success 6
;; [Work Test] Success 7
;;<Error Message> signaled about incorrect parameter eight
;; [Work Test] Success 8

отредактировал(а) Яков Замир Кацман (нью): 2017-11-18 23:45 GMT+3 часа(ов)
> 1 <


Онлайн :

0 пользователь(ей), 8 гость(ей) :




Реклама на сайте: