Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M |
![]() ![]() |
Топик располагается на нескольких страницах: 1 2 [все] |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Как правильно использовать $ETRAP для получения нужного эффекта? Вот программка
,M9, А хотелось бы получить ,M9, Иными словами, как использовать обработчик ошибок для возврата на нужный мне уровень? В данном случае на уровень процедуры A. |
||
16 ноя 15, 11:13 [18422482] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Фух... Экспериментальным путем получил желаемое
|
||
16 ноя 15, 11:27 [18422589] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Т.е. получается следующее: - Объявлять $etrap можно хоть в начале программы - "сбрасывать" $etrap нужно на два уровня ниже уровня желаемого возврата |
16 ноя 15, 11:30 [18422606] Ответить | Цитировать Сообщить модератору |
DAiMor Member Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow Сообщений: 2633 |
это просто непонимание $etrap, в эту переменную просто нужно установить команду которая будет выполнена при срабатывании ошибки и все, и просто прерывается текущий стек. есть еще $ztrap в данном случае выполнение происходит на уровне где переменная была объявлена. т.е. если в первом примере поставить s $zt="ERROR"то результат уже будет иной ,M9,тогда как, с $ztrap можно получить результат как с $etrap, уточнив что ошибку нужно обработать в месте ее срабатывания таким образом s $zt="*ERROR"и результат будет аналогичен как был с $etrap ,M9, |
16 ноя 15, 11:58 [18422824] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Ты так много написал, а пример так и не сделал... Каков твой вариант для нужного мне вывода? |
||
16 ноя 15, 13:07 [18423223] Ответить | Цитировать Сообщить модератору |
DAiMor Member Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow Сообщений: 2633 |
если нужно установить обработчик ошибок на том же уровне то try catch либо нужно устанваливать ниже по стеку
,M9, |
||||||
16 ноя 15, 13:13 [18423279] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Я разве про него спрашивал? ![]() |
||
16 ноя 15, 13:39 [18423493] Ответить | Цитировать Сообщить модератору |
DAiMor Member Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow Сообщений: 2633 |
|
||||
16 ноя 15, 14:59 [18424135] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
DAiMor, забудь про try catch. Я х/з как тебе еще сказать... Нет его. Как вернуться на нужный мне уровень я уже показал своим примером. Но там подключается другая проблема... Я не получаю нужных мне переменных "окружения".
,M9, А нужно val=5 |
||
16 ноя 15, 15:24 [18424308] Ответить | Цитировать Сообщить модератору |
DAiMor Member Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow Сообщений: 2633 |
,M9, |
||||
16 ноя 15, 15:34 [18424361] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
DAiMor, ты через строчку челе читаешь? ![]() Мне нужен вывод ,M9, |
16 ноя 15, 15:55 [18424508] Ответить | Цитировать Сообщить модератору |
DAiMor Member Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow Сообщений: 2633 |
,M9, |
||
16 ноя 15, 16:07 [18424589] Ответить | Цитировать Сообщить модератору |
Alexey Maslov Member Откуда: СПб Сообщений: 1547 |
Проблема в том, что ты слишком рано чистишь $ec. Как только ты это сделал, обработка ошибок закончена. Нужен контроль $estack. Перечитай "синего Кирстена", там $et-обработка разжёвана достаточно подробно.
|
||
16 ноя 15, 16:10 [18424615] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Почитаю, она вроде у нас есть... |
||
16 ноя 15, 16:12 [18424632] Ответить | Цитировать Сообщить модератору |
servit Member Откуда: г. Кишинёв, Республика Молдова Сообщений: 3117 Блог |
|
||
16 ноя 15, 16:16 [18424675] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Alexey Maslov, с go to точно не пойдет... Пока за рабочий вариант примем последний вариант от DAiMor. Спасибо за него. |
16 ноя 15, 16:17 [18424680] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Т.ч. и вариантов пока нет. |
||
16 ноя 15, 16:19 [18424700] Ответить | Цитировать Сообщить модератору |
Alexey Maslov Member Откуда: СПб Сообщений: 1547 |
На самом деле, костыль с "g Afinita" лишний: надо просто завершить обработку ошибки на уровне $estack=1.
ИМХО, зря ISC, гонясь за модой, практически убрала $et под сукно и даже почему-то не рекомендует ей пользоваться. С Cache 4.1 по Cache 2015.1 пользуемся, проблем никаких. |
||
16 ноя 15, 16:20 [18424710] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Дело в том, что в нашей задачке такое реализовано. Но пока никак не можем повторить отдельно на маленькой модели. ![]() Там нет все ваших подходов. Но работает как нужно. |
16 ноя 15, 16:21 [18424716] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Напишу так... try catch есть но нужно сделать без него. |
||||
16 ноя 15, 16:25 [18424747] Ответить | Цитировать Сообщить модератору |
Alexey Maslov Member Откуда: СПб Сообщений: 1547 |
krvsa, чем goto не угодила? Если "не кошерно", исправь в моем последнем варианте "g ERROR" на "d ERROR" и "$es>1" на "$es>2". P.S. Плюс моего варианта в том, что он написан на стандартном M. |
16 ноя 15, 16:28 [18424769] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Взял твой последний пример...
,M9, А нужно ,M9, |
||||
16 ноя 15, 16:42 [18424901] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Вот за чистоту и боремся... ![]() |
||
16 ноя 15, 16:43 [18424910] Ответить | Цитировать Сообщить модератору |
Alexey Maslov Member Откуда: СПб Сообщений: 1547 |
Мсье знает толк в извращениях... С уровня стека ты ушёл? Ушёл. Значит и значение val видишь действующее на том уровне, где ты оказался. Однако можно добиться того, что ты хочешь, примерно так:
P.S. Здесь уже без goto никак, но тут уж "или шашечки, или ехать". |
||
16 ноя 15, 17:16 [18425139] Ответить | Цитировать Сообщить модератору |
servit Member Откуда: г. Кишинёв, Республика Молдова Сообщений: 3117 Блог |
krvsa,
,M9, |
||
16 ноя 15, 18:41 [18425703] Ответить | Цитировать Сообщить модератору |
Alexey Maslov Member Откуда: СПб Сообщений: 1547 |
servit, зачем преумножать сущности и привлекать нестандартные переменные, когда вполне можно обойтись стандартом? ТС $zv не указал, значит возможно код пишется не только под Каше, а $zt-обработка в каждом MUMPSe своя. К тому же $et (потенциально) функционально богаче, чем $zt. Например, если убрать проверку в строке ERROR+1, получаем прототип обработчика, сохраняющего контекст на всех пройденных уровнях стека. |
17 ноя 15, 01:12 [18426988] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Да. Нужно сделать для разных версий Кащея и под GT.M... Но повторюсь, у нас сейчас это работает. Но проклятый нидзя-код (используется только $et) пока не удается разобрать. ![]() |
||
17 ноя 15, 08:14 [18427214] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
n val А это уже не то, что нужно... |
||
17 ноя 15, 08:32 [18427243] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Смог таки разобраться в том нидзя-коде. ![]() Вот как можно все организовать
|
||
17 ноя 15, 09:52 [18427502] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Спасибо всем, кто откликнулся на проблему. |
17 ноя 15, 10:09 [18427620] Ответить | Цитировать Сообщить модератору |
Alexey Maslov Member Откуда: СПб Сообщений: 1547 |
Много лишнего кода. Второй обработчик только ради того, чтобы пропустить 2 строчки первого? Привязка к конкретным меткам (потеря универсальности) вместо простой проверки $estack? Впрочем все это ИМХО, главное, что тебе твой вариант нравится. |
17 ноя 15, 10:46 [18427918] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Это для пущей наглядности. :)) Поскольку во всех книжках как раз кода кот наплакал и ниже второго уровня никто примеров не дает. А тут полная эмуляция нашей (по крайней мере) задачи.
Не совсем понял про строчки... Второй обработчик выводит на нужный уровень стека для "возврата" в нужное место программы.
Это как частный случай... Т.с. для простоты и иллюстрации. Как выводить на нужный уровень стека каждый может решить для себя самостоятельно. |
||||||
17 ноя 15, 11:24 [18428178] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
Вот вариант с $es...
|
||
17 ноя 15, 11:34 [18428222] Ответить | Цитировать Сообщить модератору |
servit Member Откуда: г. Кишинёв, Республика Молдова Сообщений: 3117 Блог |
|
||||||
17 ноя 15, 12:10 [18428499] Ответить | Цитировать Сообщить модератору |
servit Member Откуда: г. Кишинёв, Республика Молдова Сообщений: 3117 Блог |
|
||
17 ноя 15, 12:22 [18428584] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
servit, нас полностью устраивает наш последний вариант. |
17 ноя 15, 13:41 [18429079] Ответить | Цитировать Сообщить модератору |
Alexey Maslov Member Откуда: СПб Сообщений: 1547 |
Есть черновик статьи про обработку ошибок в Каше. ISC отказала в ее публикации на хабре, но если "народу интересно", можно поискать другое место. Материал родился в результате попыток объяснить коллегам, как работает $et и чем отличается от $zt. |
17 ноя 15, 13:53 [18429174] Ответить | Цитировать Сообщить модератору |
gluconat_ca Member Откуда: Сообщений: 105 |
Нужный эффект, правда не в каше, но это, думаю не важно, можно получить (из своего опыта) переопределением в обработчике ошибки переменной $et.
|
||
18 ноя 15, 15:55 [18436386] Ответить | Цитировать Сообщить модератору |
servit Member Откуда: г. Кишинёв, Республика Молдова Сообщений: 3117 Блог |
|
|||
18 ноя 15, 16:27 [18436598] Ответить | Цитировать Сообщить модератору |
krvsa Member Откуда: г Волжский Сообщений: 13116 |
gluconat_ca, спасибо за вариант. ![]() |
19 ноя 15, 08:15 [18438928] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: 1 2 [все] |
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M | ![]() |