As I see, I can't explain it with my English.

There are recoverable errors as zero division. With the codeblock that I 
propose we can solve this problem and the code can
continue without caching resolved exceptions.

Actually this is simply impossible because this codeblock is harcoded to catch 
all errors.

LOCAL b

TRY WITH {|o| MyError( o ) }

        b := 1 / 0 // THIS ERROR IS NOT CACHED, b prints 0

        ...

        // the rest of code is executed

        ... // The rest of errors are cached
                
CATCH oErr
     ...
END TRY

FUNCTION MyError( e )

     // by default, division by zero yields zero
     IF ( e:genCode == EG_ZERODIV )
        RETURN 0
     ENDIF

RETURN .F.

It is only an example of use.


Ron Pinkas escribió:
> Miguel,
> 
> Sorry but you are mixing 2 different issues. The TRY construct in all 
> those languages will still raise the exception, if you have any error. 
> The CATCH syntax simply allows you to have different catchers for 
> different errors, at different levels. Those samples you posted function 
> exactly like this:
> 
>    TRY
>         ? a /0
>    CATCH e
>         SWITCH e:genCode
>              CASE EG_ZERODIV
>                  ? "Caught division by 0"
>                  EXIT
> 
>               DEFAULT
>                    Throw( e )
>          END
>    FINALLY
>          ? " In finally"
>    END
> 


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
xHarbour-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xharbour-developers

Reply via email to