Constant statement limitations.

Peter W A Wood peterwawood at gmail.com
Tue May 29 05:27:30 EDT 2012


I know its a kludge but couldn't you do something like:

<?livecode

constant x = 4

on somehandler
put "within a handler, x =" && x & "<br>"
end somehandler

on run-it
  put "lc version is" && the version & "<br>"
  put "this web page shows the problem" & "<br>" 
  put "here x = " && x & "<br>"
  somehandler
  put "and finally x still =" && x & "<br>"
end run-it

run-it

?>

Regards

Peter


On 29 May 2012, at 17:02, Alex Tweedly wrote:

> Thanks Igor, but you're talking about where constants can be declared; I was talking about where they can be used.
> 
> I read the dictionary the same way you do, in the context of declaration (constants can be declared within or outwith handlers, with different context). And I agree with Mark that redefining a constant is a bad idea.
> 
> But neither of those was my issue - in my reply to Craig I did what I should have done in the first place and included a complete script showing the problem. Constants that have been properly, globally declared can be used within handlers but do not take effect outside handlers.
> 
> So in a revserver that is "just one big script" you cannot use the constants except within any handlers.
> 
> -- Alex.
> 
> On 29/05/2012 05:51, Igor de Oliveira Couto wrote:
>> Alex, I don't know if you and I are reading the dictionary in the same way:
>> 
>> On 29/05/2012, at 9:00 AM, Alex Tweedly wrote:
>> 
>> [...]
>> 
>>> The dictionary entry for constant says:
>>>> If you place the constant statement in a handler, you can use the constant anywhere in the handler. If you place the constant statement in a script outside any handler, you can use the constant anywhere in the handlers of that script.
>>> NB - "can use the constant anywhere *in the handlers* of that script".
>>> 
>>> That was a reasonable limitation in traditional Livecode - but seems less reasonable in the context of revserver.
>> [...]
>> 
>> I *think* what the dictionary means - and please someone correct me if I'm wrong - is that there are 2 ways to declare a constant value: INSIDE a handler (like inside a mouseUp, enterField, etc.), or OUTSIDE any handlers (the same way you'd declare a SCRIPT VARIABLE). The 2 ways would be like this:
>> 
>> INSIDE A HANDLER
>> 
>> on enterField
>>    constant kIncrease = 3
>>    answer kIncrease
>> end enterField
>> 
>> The problem with declaring the constant that way, is that it is defined only for THAT specific 'enterField' handler. If you also had a second handler that expected to use that value, such as...:
>> 
>> on closeField
>>    answer kIncrease
>> end closeField
>> 
>> ...that would fail, because 'kIncrease' is defined only inside 'enterField'. To overcome that, you can declare the constant like this:
>> 
>> 
>> OUTSIDE HANDLERS
>> 
>> contant kIncrease = 3
>> 
>> on enterField
>>    answer kIncrease
>> end enterField
>> 
>> on exitField
>>    answer kIncrease
>> end exitField
>> 
>> ...would work, as 'kIncrease' will now be available to *all* handlers.
>> 
>> In the context of revServer, this still applies. For instance: if your revServer application is just one big script - ie., a 'main' script that 'includes' or 'requires' others (which is, in effect, the same as having one long script) - then a constant declaration outside all handlers will in effect make it a global constant.
>> 
>> I hope this helps!
>> 
>> --
>> Igor Couto
>> Sydney, Australia
>> 
>> 
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
>> 
> 
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode




More information about the use-livecode mailing list