powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / $ZTRAP и ProcedureBlock
5 сообщений из 5, страница 1 из 1
$ZTRAP и ProcedureBlock
    #34511640
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу разобраться с обработкой ошибок в каше5

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ClassMethod MyMethod()
{
 s trap=$ZT,$ZT="OnError"
 s ^log( 1 , 2 )= 3 
 q
OnError 
 s $ZT=trap
 w $ZE
}

При компилляции выдает
ERROR #1058: Invalid value for trap : '$ZT=trap' : Offset:8 [OnError+1^My.Forms.1]
TEXT: s $ZT=trap

Если [ ProcedureBlock = 0 ], то компилляция идет нормально.
Cache for Windows (Intel) 5.2 (Build 329) Thu Jun 15 2006 16:40:08 EDT

Из-за чего?
...
Рейтинг: 0 / 0
$ZTRAP и ProcedureBlock
    #34511772
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 5-ке, если не ошибаюсь, $ZT отслеживается в "стеке"

Посему советую trap убрать и писать s $ZT=""
...
Рейтинг: 0 / 0
$ZTRAP и ProcedureBlock
    #34512314
Hampster-Mumpster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю 2 коп. Немного перепутаны 2 вещи:
- отключение обработки ошибок внутри обработчика $zt, т.е. конструкция:
Код: plaintext
1.
OnError 
 s $zt=""
обязательная к применению, т.к. иначе произойдет зацикливание при ошибке внутри обработчика
- восстановление обработчика $zt, действовавшего на предыдущем уровне стека, которое, действительно, происходит автоматически при выходе по Quit и не требует от программиста никаких усилий.
Однако конструкция
Код: plaintext
set $zt=var
в общем случае не запрещена синтаксисом языка. Она попадает под запрет лишь в контексте процедурных блоков. Причина, видимо, кроется в том, что иначе компилятору не проверить на допустимость значение $zt. А проверить "хочется", т.к. в процедурах из трех вариантов:
Caché ObjectScript ReferenceSET $ZTRAP=“location”
SET $ZTRAP=“*location”
SET $ZTRAP=“^%ET” or “^%ETN”

где location = tag | ^routine | tag^routine
допустим только первый подвариант первого варианта (т.е. tag - локальная метка). В документации об этом четко не сказано, умоминается лишь, что запрещен второй вариант “*location”. Жаль, что формального определения COS не существует (по кр. мере, в общем доступе).
...
Рейтинг: 0 / 0
$ZTRAP и ProcedureBlock
    #34512398
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, понятно стало :-)
...
Рейтинг: 0 / 0
$ZTRAP и ProcedureBlock
    #34513698
VadimF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в Cache' 2007.1 есть try catch.
Вы как-то спрашивали про переход Cache' 2007.1., когда она появится.

Вадим
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / $ZTRAP и ProcedureBlock
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]