how are variables passed from functions?
Jacques Hausser
jacques.hausser at unil.ch
Fri Nov 14 11:52:37 EST 2014
Hi Tiemo,
It is always better to be explicit, and in this case to use a return statement. Note that a shorter function foo1 could be:
function foo1
return foo2()
end foo1
As for my post of this morning, my suggestion was certainly too complex. It is sufficient to figure a transitory ‘returnedValue’ generated by the calling script, where it will pick the last value returned. In the case of cascading functions, each return would overwrite the previous ‘returnedValue”. If a return is missing, then the calling script will get the value of the previous one.
Jacques
> Le 14 nov. 2014 à 17:20, Tiemo Hollmann TB <toolbook at kestner.de> a écrit :
>
> Hi Craig,
> perhaps I didn't expressed myself correct, I'm not a native speaker.
> For me the result seems the same, if I put a return myVar2 at the end of function foo1 or not (see below). The intermediate function is terminated AFTER the call of the second function at the end.
> My original script works without a return in foo1. My question was, if it is a good or bad practice if I would add this return, just for "safety reasons" to be sure anything is returned in case I would change anything, e.g. I would replace the call of function foo2 by any other structure.
> Tiemo
>
> --Btn script
> on mouseUp
> put foo1() into myVar1
> end mouseUp
>
> --script in stack
> function foo1
> put foo2() into myVar2
> return myVar2 -- return statement yes or no?
> end foo1
>
> function foo2
> return "Test"
> end foo2
>
>> -----Ursprüngliche Nachricht-----
>> Von: use-livecode [mailto:use-livecode-bounces at lists.runrev.com] Im Auftrag
>> von dunbarx at aol.com
>> Gesendet: Freitag, 14. November 2014 17:00
>> An: use-livecode at lists.runrev.com
>> Betreff: Re: how are variables passed from functions?
>>
>> Hi.
>>
>>
>> Putting intermediate returns will immediately terminate the function call. How
>> would you reach the next stage?
>>
>>
>> Perhaps this is another "slightly off" aspect of the original example: The
>> intermediate variable "myVar2" is only seen in the debugger, and therefore
>> only actually "present" at all, when the secondary function returns it s
>> value. And even then it is only in passing, you might say, on the way back to
>> the primary function call. But this would never complete if you placed a
>> return in the primary function handler.
>>
>>
>> Try it. Watch the flow. You HAVE to not return in any of these intermediate
>> handlers.
>>
>>
>> Craig
>>
>>
>>
>> -----Original Message-----
>> From: Tiemo Hollmann TB <toolbook at kestner.de>
>> To: 'How to use LiveCode' <use-livecode at lists.runrev.com>
>> Sent: Fri, Nov 14, 2014 10:38 am
>> Subject: AW: how are variables passed from functions?
>>
>>
>> Hi Craig,
>> I wasn't aware of this behaviour.
>> I think about more complex functions with a lot of if and else structures,
>> where you are perhaps not aware anymore of this function chain after some
>> years, when you are changing the first or the second function?
>> Would it be a good or at least not a bad practice to put a return in the
>> intermediate function? Or could it even break anything if you would explicitly
>> return myVar2 in the first function?
>> Thanks
>> Tiemo
>>
>>
>>
>>> -----Ursprüngliche Nachricht-----
>>> Von: use-livecode [mailto:use-livecode-bounces at lists.runrev.com] Im
>> Auftrag
>>> von dunbarx at aol.com
>>> Gesendet: Freitag, 14. November 2014 16:12
>>> An: use-livecode at lists.runrev.com
>>> Betreff: Re: how are variables passed from functions?
>>>
>>> I don't see any anomaly here. Since the intermediate function calls
>>> yet another function, it never needs to "close", that is, return, a
>>> value. It
>> is a
>>> pass-through entity, a card carrying member of the chain of handler calls.
>>> Step through this variation:
>>>
>>>
>>>
>>> on mouseUp
>>> put double(2) into myVar1
>>> answer myVar1
>>> end mouseUp
>>>
>>>
>>> function double var
>>> put redouble(var * 2) into myVar2 -- no return in this function end
>>> double
>>>
>>>
>>> function redouble var
>>> return var * 2
>>> end redouble
>>>
>>>
>>> The "8" you get is processed sequentially through the handler path,
>>> just
>> like
>>> bacon.
>>>
>>>
>>> Craig Newman
>>>
>>>
>>>
>>> -----Original Message-----
>>> From: Tiemo Hollmann TB <toolbook at kestner.de>
>>> To: 'How to use LiveCode' <use-livecode at lists.runrev.com>
>>> Sent: Fri, Nov 14, 2014 3:47 am
>>> Subject: how are variables passed from functions?
>>>
>>>
>>> By accident I noticed that I don't have a return at a certain point of
>>> a function but nevertheless the value was passed back without a return
>>> to
>> the
>>> calling handler.
>>>
>>> I can reproduce the issue to this scenario:
>>>
>>>
>>>
>>> --Btn script
>>>
>>> on mouseUp
>>>
>>> put foo1() into myVar1 -- I get the value "Test"
>>>
>>> end mouseUp
>>>
>>>
>>>
>>> --script in stack
>>>
>>> function foo1
>>>
>>> put foo2() into myVar2 -- no return in this function
>>>
>>> end foo1
>>>
>>>
>>>
>>> function foo2
>>>
>>> return "Test" -- return here in second level
>>>
>>> end foo2
>>>
>>>
>>>
>>> Up to now I thought that every function has to have a return statement
>>> if you want anything getting back.
>>>
>>> Can somebody explain to me what is going on here? How is the value
>>> from function foo2 passed back to the mouseup handler, even with
>>> different var names?
>>>
>>> Is this a bug or just an accident or even wanted?
>>>
>>> Thanks for enlightening
>>>
>>> Tiemo
More information about the use-livecode
mailing list