[Laszlo-dev] Is this the idiom people use to set the initial value of an attribute in a class declaration?

P T Withington ptw at openlaszlo.org
Mon Jul 9 09:09:30 PDT 2007


Er, not.

All our attributes are instance attributes.  If you leave out $once,  
you get a micro-optimization if the initial value is a constant, and  
you get something you probably did not want otherwise.

It's a weak spot in the implementation right now that Henry and I  
hope to repair as we modernize the tag compiler.

On 2007-07-09, at 09:12 EDT, Elliot Winard wrote:

> I always assumed that, unless $once{} was used, I was declaring a  
> static attribute.  I thought that was noted in the docs.
>
> Maybe not?
> -e
>
>
> On Mon, Jul 9, 2007 at  7:55 AM, P T Withington wrote:
>
>> The bug we have is that we don't treat every instance initializer  
>> as an expression, so you can't say `value="new Array"` to get  
>> around the sharing, you have to say `value="${new Array}"`.  I  
>> think this is an FAQ that Antun covers.
>>
>> And yes, you are right.  This would be solved by moving attribute  
>> initializers into the class initializer.
>>
>> But if we fix this bug, we'll need to provide a way to share in  
>> the cases where you _do_ want to share, perhaps by providing an  
>> LZX way to declare a static attribute?
>>
>> On 2007-07-08, at 22:25 EDT, Henry Minsky wrote:
>>
>>> I've been hacking on an app this week, and realizing it's been  
>>> awhile since
>>> I tried
>>> to actually program anything in Laszlo.
>>>
>>> There's this huge "gotcha" when setting the initial value of  
>>> attributes to
>>> an object in a class
>>> declaration, like this
>>>
>>>
>>> <class name="foo">
>>>  <attribute name="pets" value="[]"/>
>>>
>>> Which screws you since that object will now be shared among all  
>>> instances.
>>>
>>> The idiom I think I remember people using is
>>>
>>> <class name="foo">
>>>  <attribute name="pets" value="$once{[]}"/>
>>>
>>> Or more readably
>>>
>>> <class name="foo">
>>>  <attribute name="pets" value="$once{new Array()}"/>
>>>
>>> Is that what we recommend to do now? I guess we going to quietly   
>>> fix this
>>> issue if and when we get
>>> our node initialization rewritten as a compile-time-generated  
>>> initializer
>>> function?
>>>
>>>
>>> -- 
>>> Henry Minsky
>>> Software Architect
>>> hminsky at laszlosystems.com
>
>
> ---=---===-------
> Elliot Winard
> Sr. Software Engineer
> Webtop Team
> ---=---===-------



More information about the Laszlo-dev mailing list