Externals Under 2.7.x
Trevor DeVore
lists at mangomultimedia.com
Fri Feb 9 23:28:11 EST 2007
On Feb 9, 2007, at 7:10 PM, Mark Wieder wrote:
> If you set error to False you still have control over the result value
> returned to the engine when your external routine exits. This is the
> proper way to signal to the engine that an error has occurred, and
> that way the script that called the external routine can parse the
> result and determine whether or not an error has occurred.
>
> For functions you will normally return your result in the "it"
> variable and thus you have "the result" available for an error
> message. I've got a writeup on this at
>
> http://www.revjournal.com/tutorials/everything-you-know.html
Interesting article Mark. I wasn't aware that the result was set
when calling functions.
As for storing your result in the "it" variable, one potential issue
I see (if I am understanding correctly) is that functions defined in
an external would have different basic behavior than functions
defined in Revolution (Transcript). Any function defined in an
external would have to be called like this in order to work properly:
put getTheNumberFour() into theError
answer it -- CONTAINS THE NUMBER "4"
because if the user called the external function like this:
get getTheNumberFour()
then both "it" and "the result" would contain the error message.
Plus you would lose the ability to put result of the function into a
meaning variable name without adding another assignment (i.e. put it
into theMeaningVariableName).
I think this is why I prefer something along the lines of a
GetLastError() call. Or another option would be to define some other
variable that was responsible for holding errors from external
functions. Something like "revLastExternalError". By always setting
this variable to any error messages from within the external you
maintain standard behavior for functions and have a variable to check
for errors:
put getTheNumberFour() into theNumberFour
if revLastExternalError is not empty then
answer "How did it mess up returning the number 4? (" &
revLastExternalError & ")"
end if
--
Trevor DeVore
Blue Mango Learning Systems - www.bluemangolearning.com
trevor at bluemangolearning.com
More information about the use-livecode
mailing list