[REBOL] Re: Help me, Obi Reb Kenobi, you're my only hope!
From: lmecir:mbox:vol:cz at: 2-Sep-2002 10:19
Hi Gabriele, Romano, myself and others,
when I said:
<<L>>
IS-REALLY-ERROR? function works for simple code like above, but, AFAIK, we
cannot handle all possible cases, like e.g.:
is-really-error? [1 first block2] ; == true
(until errors will be "first class")"
<</L>>
, I was wrong. Here is a (complicated, but working) version of the DEFAULT
function, that can handle it:
do http://www.rebolforces.com/~ladislav/highfun.r
default2: transp-func [
code [block!]
fault [block!]
/good pass [block!]
/local result error code2
] [
transp-while [not tail? code] [
code: if error? set/any 'error try [
set/any 'code2 second do/next compose [
error? set/any 'result (code)
]
skip code (index? code2) - 3
] [tail code]
]
either error? get/any 'error [
fault: func [[throw] error [error!]] fault
local-return fault error
] [
do any [pass [local-return get/any 'result]]
]
]
block2: head insert copy [] try [first []]
default2/good [first block2 1] ["error"] ["pass"] ; == "pass"
default2/good [first block2] ["error"] ["pass"] ; == "pass"
default2/good [first []] ["error"] ["pass"] ; == "error"
Ciao
Ladislav