World: r3wp
[!REBOL3 Extensions] REBOL 3 Extensions discussions
older | first |
BrianH 4-Oct-2011 [2527:last] | The method is pretty simple. Normally the functions return data in a particular format. Upon an error though they just return a block with 3 elements, the first two of which are lit-words, the last could be anything; this is passed directly to apply :cause-error. The error block can be recognized and handled easily with this code in the REBOL functions that wrap the natives: all [block? result lit-word? first result apply :cause-error result] It's similar to the way error handling is done in the low-level sys load functions, particularly sys/load-header. Upon an error, instead of a block the function returns a word! value, which can be passed to cause-error by the calling function, using code like this: set [hdr: code:] load-header/required data if word? hdr [cause-error 'syntax hdr source] Word values are easier to handle safely than error values. Note that the argument provided to cause-error in this case is different from that provided to load-header: This lets you trigger errors with information that load-header isn't provided, giving your errors more context that is useful to the programmer. Not exactly the same thing as the ODBC driver, but close. |
older | first |