send "subCheckNow" to me, or?

Alex Tweedly alex at tweedly.net
Fri Jul 7 05:48:09 EDT 2006


Scott Rossi wrote:

>Recently, Garrett Hylltun wrote:
>
>  
>
>>Is it better to use "send" or just use the name of the handler?
>>
>>    
>>
Short answer : Just use the name of the handler.
Long answer : see below.

>>on subCheckNow
>>   -- do stuff here
>>   send "subCheckNow" to me
>>end subCheckNow
>>
>>Or this?
>>
>>on subCheckNow
>>   -- do stuff here
>>   subCheckNow
>>end subCheckNow
>>
>>
>>Is the second even allowed? And, if it is allowed, is their any ill
>>effects from doing this?
>>    
>>
>
>I thought you might end up with recursion in the second option, but
>apparently the script compiler doesn't like option 2.  So the answer to your
>question seems to be: stick with option 1.
>
>  
>
My script compiler doesn't object to it at all (Rev 2.6.1., WinXP). Did 
you maybe have both options in the script at the same time (in which 
case the script compiler would complain because there were two handlers 
with same name) ?

The second option calls the handler directly - i.e. in the same 
execution context, so as written it is indeed infinite recursion. Of 
course in a real script, the "do something here" would contain the 
possibility of an early exit from the handler. Similarly,the first 
option will continue to send messages to itself indefinitely unless 
there is some code that can exit earlier in the handler.

The docs say

>   Note:  Using the send command is slower than directly executing the 
> commands using the normal message path. For best efficiency, use the 
> send command only when you want to delay the message or when the 
> handler you want to execute is not in the message path.

Since you were sending to the same handler, it is in the message path, 
and also you had no delay specified - so it would seem you should never 
do option 1 in preference to option 2.



NOTE that a ""delayed send" (such as "send xxx to me in N ticks") is 
commonly used, because it queues the message, and therefore affects the 
order of execution. As the docs say,

>   Important!  Specifying a time can affect the order in which 
> statements are executed. If you don't specify a time, the message is 
> sent immediately, and any handler it triggers is completed before the 
> rest of the current handler is executed. If you use the send in time 
> form of the send command--even if you specify a time of zero 
> seconds--the current handler finishes executing before the message is 
> sent.

but there seems to be no reason to use the "immediate" send to the same 
handler.



-- 
Alex Tweedly       http://www.tweedly.net

-------------- next part --------------
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.9.9/382 - Release Date: 04/07/2006


More information about the use-livecode mailing list