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