Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Problem with initial value of property
Message
From
27/09/2012 12:20:17
 
General information
Forum:
Visual FoxPro
Category:
Classes - VCX
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Windows XP SP2
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01553671
Message ID:
01553771
Views:
92
>>>Hi James,
>>>
>>>Well then, why is this not in the documentation?! It is very important to know this, isn't it. I can say I'm a really experienced vfp developer, doing vfp since 1990. But this has never been told or explained to me, nowhere, not in the docs, not in the Hackers guide. 'By-design' may be what has been told to you, but to me that sounds like a rationalisation, to hide the real reason: a design flaw or simply a blind spot for this when implementing it, in both cases a flaw they somehow didn't want to repair.
>>>
>>>Re-using the cached version of a previously instantiated object is smart enough, but of course that should not imply the re-use of any initial values.
>>>
>>>>Peter --
>>>>
>>
>>It is not a language behaviour,
>>it is an optimization.
>>
>>Every optimization pays a price!
>>
>
>I'm not sure it's an optimization if it leads to incorrect results. I could drive my car 100 miles an hour (maybe) but that might not optimize the outcome. As you imply, going for pure speed endangers the integrity side of the tradeoff.
>

The price is a limit or the risk of some side effect.

On VFP you can set a class property to deterministic values only,
a scx form have not this limit.

Example:
Set a CLASS'S property (Tag) to a defined function
=(this.SettProp())

procedure SettProp
return dtoc(date())
try to add this class to a scx form ( see the error !! )

change the property to "(this.SettProp())"

add the class to the scx ( no error !!)

now change the member property to "=(this.SettProp())"

this expression is evaluated every time the scx is load.

>
>>>>By design.
>>>>
>>>>FoxPro does neat things with caching classes you have referenced so it does not have to re-create them from
>>>>scratch every time you use them.
>>>>
>>>>This is the same problem experienced in VCX-based classes where the property value is created with an '=',
>>>>which is executed the first time the class is created only.
>>>>
>>>>>Hi all,
>>>>>
>>>>>In the code hereunder the nStart property is set to the value of seconds() at the moment of creating the object. However, if I create another instance of the object (while the first is still active) the property does not get the value of seconds() of the moment of creation, but appears to be totally equal to the property of the first instance!
>>>>>
>>>>>I imagine I can get around this by redeclaring it in the Init(). But why is this happening? Another bug or 'just' a quirck? Or is it by-design??
>>>>>
>>>>>
DEFINE CLASS cusLogFileHandler AS custom
>>>>>	
>>>>>	nHandle    = 0
>>>>>	nErrors    = 0
>>>>>	dStart     = date()		&& start date - required for calculation of elapsed time
>>>>>	nStart     = seconds()
>>>>>	cFileName  = ""
>>>>>
>>>>>	PROCEDURE init( tcFileName, tlNew )
>>>>>		local lcWhat
>>>>>
>>>>>		with this
>>>>>			*
>>>>>
Previous
Reply
Map
View

Click here to load this message in the networking platform