parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

пользовательский класс: регистрация в @unhandled_exception

Александр Петросян (PAF) 20.01.2003 11:37 / 20.01.2003 11:38

не совсем: вывод != действия, хотя всё близко.

мне не нравится: два куска кода общаются между собой, а не принадлежат одной сущности.

получается, что из проекта в проект нельзя списать 1(один) файлик, чтобы поддержать функционал.

но всегда можно что-то придумать.
вариант к рассмотрению:
@auto[]
$user_eh[^hash::create[]]

@register_user_exception_handler[junction][i]
$i($user_eh)
$user_eh.$i[$junction]

@unhandled_exception[e;stack][i]
^for[i](0;$user_eh-1){
    ^if(!$e.handled){
        ^user_eh.$i[e]
    }
}
^if(!$e.handled){}
теперь любой объект/класс может зарегистрироваться, и обрабатывать глобальные ошибки.

например:
@CLASS
user

@auto[]
^register_user_exception_handler[local_exception_handler]

@local_exception_handler[e]
^if(e.type eq "user.authorization"){
    ^authorization_failed[]
    $e.handled(1)
}

@authorization_failed[]
actions

@authorize[]
^if(){
    ^throw[user.authorization;failed]
}
конкретно применительно к авторизации пользователей это выглядит немного громоздко, однако это только один из примеров применения.
и понятно, что подобным образом сообщённую ошибку можно легко перехватить, и, при надобности, подавить.