|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
servit, зачем преумножать сущности и привлекать нестандартные переменные, когда вполне можно обойтись стандартом? ТС $zv не указал, значит возможно код пишется не только под Каше, а $zt-обработка в каждом MUMPSe своя. К тому же $et (потенциально) функционально богаче, чем $zt. Например, если убрать проверку в строке ERROR+1, получаем прототип обработчика, сохраняющего контекст на всех пройденных уровнях стека. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 01:12 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
Alexey Maslovзначит возможно код пишется не только под Каше Да. Нужно сделать для разных версий Кащея и под GT.M... Но повторюсь, у нас сейчас это работает. Но проклятый нидзя-код (используется только $et) пока не удается разобрать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 08:14 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
servit Код: plaintext 1. 2. 3. 4.
n val А это уже не то, что нужно... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 08:32 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
Смог таки разобраться в том нидзя-коде. Вот как можно все организовать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В этом случае вы получаете нужное значение переменных. А второй обработчик позволяет вывести на нужный уровень стека. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 09:52 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
Спасибо всем, кто откликнулся на проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 10:09 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
Много лишнего кода. Второй обработчик только ради того, чтобы пропустить 2 строчки первого? Привязка к конкретным меткам (потеря универсальности) вместо простой проверки $estack? Впрочем все это ИМХО, главное, что тебе твой вариант нравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 10:46 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
Alexey MaslovМного лишнего кода. Это для пущей наглядности. :)) Поскольку во всех книжках как раз кода кот наплакал и ниже второго уровня никто примеров не дает. А тут полная эмуляция нашей (по крайней мере) задачи. Alexey MaslovВторой обработчик только ради того, чтобы пропустить 2 строчки первого? Не совсем понял про строчки... Второй обработчик выводит на нужный уровень стека для "возврата" в нужное место программы. Alexey MaslovПривязка к конкретным меткам (потеря универсальности) вместо простой проверки $estack? Это как частный случай... Т.с. для простоты и иллюстрации. Как выводить на нужный уровень стека каждый может решить для себя самостоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 11:24 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
Вот вариант с $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 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 11:34 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
krvsaservit Код: plaintext 1. 2. 3. 4.
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 12:10 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
servit s:$st=4 $ec=""Или так: s:$st($st,"PLACE")["C+" $ec="" ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 12:22 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
servit , нас полностью устраивает наш последний вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 13:41 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
Есть черновик статьи про обработку ошибок в Каше. ISC отказала в ее публикации на хабре, но если "народу интересно", можно поискать другое место. Материал родился в результате попыток объяснить коллегам, как работает $et и чем отличается от $zt. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 13:53 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
Нужный эффект, правда не в каше, но это, думаю не важно, можно получить (из своего опыта) переопределением в обработчике ошибки переменной $et.ERROR ;делаем то что надо на уровне возникновения ошибки ;а затем: s $et="i '$es s $ec=""""" ;это позволит подняться до нужного уровня (там, где заньючили $es и т.д.) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 15:55 |
|
Как правильно использовать $ETRAP
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 16:27 |
|
|
start [/forum/topic.php?fid=39&msg=39105144&tid=1556569]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 271ms |
total: | 397ms |
0 / 0 |