powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как правильно использовать $ETRAP
15 сообщений из 40, страница 2 из 2
Как правильно использовать $ETRAP
    #39105086
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

зачем преумножать сущности и привлекать нестандартные переменные, когда вполне можно обойтись стандартом? ТС $zv не указал, значит возможно код пишется не только под Каше, а $zt-обработка в каждом MUMPSe своя. К тому же $et (потенциально) функционально богаче, чем $zt. Например, если убрать проверку в строке ERROR+1, получаем прототип обработчика, сохраняющего контекст на всех пройденных уровнях стека.
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105144
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslovзначит возможно код пишется не только под Каше
Да.
Нужно сделать для разных версий Кащея и под GT.M...

Но повторюсь, у нас сейчас это работает. Но проклятый нидзя-код (используется только $et) пока не удается разобрать.
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105151
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit
Код: plaintext
1.
2.
3.
4.
,M9,
val=5
 
End A
End
У тебя val=5 только потому, что убраны команды

n val

А это уже не то, что нужно...
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105225
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смог таки разобраться в том нидзя-коде.

Вот как можно все организоватьtmp 
  n
STARTMENU
  f  q:'$$iteration
  q
iteration()
  n prc
  s $et="d ERROR"
  S $ec=""
  w !!,"Menu",!
  w !,1," test"
  w !,2," exit"
  w !!
  r case
  q:case'=1 0
  s prc="A^tmp"
  d @prc
  w !,"End"
  q 1
A
  n val
  s val=1
  d B
  w !,"End A"
  q
B
  n val
  s val=2
  d C
  w !,"End B"
  q
C
  n val
  s val=3
  w 1/0
  q
ERROR
  s $et=""
  w !
  zw val
  s $et="d ERR"
  q
ERR
  q:$st($st-3,"PLACE")'["STARTMENU+1^tmp"
  s $et="d ERROR"
  s $ec=""
  qВ этом случае вы получаете нужное значение переменных. А второй обработчик позволяет вывести на нужный уровень стека.
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105246
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем, кто откликнулся на проблему.
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105296
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много лишнего кода. Второй обработчик только ради того, чтобы пропустить 2 строчки первого?
Привязка к конкретным меткам (потеря универсальности) вместо простой проверки $estack?

Впрочем все это ИМХО, главное, что тебе твой вариант нравится.
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105340
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovМного лишнего кода.
Это для пущей наглядности. :))
Поскольку во всех книжках как раз кода кот наплакал и ниже второго уровня никто примеров не дает.
А тут полная эмуляция нашей (по крайней мере) задачи.
Alexey MaslovВторой обработчик только ради того, чтобы пропустить 2 строчки первого?
Не совсем понял про строчки...
Второй обработчик выводит на нужный уровень стека для "возврата" в нужное место программы.
Alexey MaslovПривязка к конкретным меткам (потеря универсальности) вместо простой проверки $estack?
Это как частный случай... Т.с. для простоты и иллюстрации.
Как выводить на нужный уровень стека каждый может решить для себя самостоятельно.
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105356
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вариант с $es...tmp 
  n
  f  q:'$$iteration
  q
iteration()
  n $es,prc
  s $et="d ERROR"
  S $ec=""
  w !!,"Menu",!
  w !,1," test"
  w !,2," exit"
  w !!
  r case
  w !
  q:case'=1 0
  s prc="A^tmp"
  d @prc
  w !,"End"
  q 1
A
  n val
  s val=1
  d B
  w !,"End A"
  q
B
  n val
  s val=2
  d C
  w !,"End B"
  q
C
  n val
  s val=3
  w 1/0
  q
ERROR
  s $et=""
  zw val
  s $et="d ERR"
  q
ERR
  q:$es>2
  s $et="d ERROR"
  s $ec=""
  q
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105400
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaservit
Код: plaintext
1.
2.
3.
4.
,M9,
val=5
 
End A
End
У тебя val=5 только потому, что убраны команды

n val

А это уже не то, что нужно...  s $et="d ERROR"
tmp 
  n val
  s val=1
  d A
  w !,"End"
  q
A
  n val
  s val=2
  d B
  w !,"End A"
  q
B
  n val
  s val=3
  d C
  w !,"End B"
  q
C
  n val
  s val=4
  d D
  w !,"End C"
  q
D
  n val
  s val=5
  w 1/0
  w !,"End D"
  q
ERROR
  if $st($st(-1),"ECODE")="" {
    w !,$ec,!
    zw val
  }
  s:$st=4 $ec=""
  q
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105417
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit s:$st=4 $ec=""Или так: s:$st($st,"PLACE")["C+" $ec=""
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105527
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit , нас полностью устраивает наш последний вариант.
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39105550
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть черновик статьи про обработку ошибок в Каше. ISC отказала в ее публикации на хабре, но если "народу интересно", можно поискать другое место. Материал родился в результате попыток объяснить коллегам, как работает $et и чем отличается от $zt.
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39106852
gluconat_ca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужный эффект, правда не в каше, но это, думаю не важно, можно получить (из своего опыта) переопределением в обработчике ошибки переменной $et.ERROR
 ;делаем то что надо на уровне возникновения ошибки
 ;а затем:
 s $et="i '$es s $ec="""""
 ;это позволит подняться до нужного уровня (там, где заньючили  $es и т.д.)
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39106893
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gluconat_caНужный эффект, правда не в каше, но это, думаю не важно
В Caché Ваш вариант тоже работает:  s $et="d ERROR"
tmp 
  n val
  s val=1
  d A
  w !,"End"
  q
A
  n val
  s val=2
  d B
  w !,"End A"
  q
B
  n val,$es
  s val=3
  d C
  w !,"End B"
  q
C
  n val
  s val=4
  d D
  w !,"End C"
  q
D
  n val
  s val=5
  w 1/0
  w !,"End D"
  q
ERROR
  w !,$ec,!
  zw val
  s $et="s:'$es $ec="""""
  q

Код: plaintext
1.
2.
3.
4.
,M9,
val=5
 
End A
End
...
Рейтинг: 0 / 0
Как правильно использовать $ETRAP
    #39107351
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gluconat_ca , спасибо за вариант.
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как правильно использовать $ETRAP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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