Darren,

Josh seems to have resolved your problem, but if you're interested,
here's a brief discussion of how references are working here:

>But since these references don't seem to propogate backwards, nulling
>one of the array elements doesn't affect the original property.  That's
>the *whole purpose* of reference vs value... a reference is a pointer
>to memory space... so if I null that memory space it should affect all
>the vars pointing to that memory space.

The way references work in ActionScript (and in Java, C#, and most
others I'm familiar with), if you assign null to a reference, you are
not "null[ing] that memory space". You are nulling that *reference*.
It's your *reference* that now points to nothing--you're not actually
changing the contents of that memory location.

The behavior you're expecting could probably be achieved by another
level of indirection in references, but I'm not aware of any language
that actually does things this way. You could even achieve this in your
own code, by providing a wrapper class for Dates that exposes the
functions setDate(), getDate(), but Josh's suggestions is a better
solution.

-- 
Maciek Sakrejda
Truviso, Inc.
http://www.truviso.com

-----Original Message-----
From: Darren Houle <[EMAIL PROTECTED]>
Reply-To: flexcoders@yahoogroups.com
To: flexcoders@yahoogroups.com
Subject: RE: [flexcoders] Array reference vs values
Date: Wed, 16 Jul 2008 21:55:33 -0400

Josh
 
Yes, what you're describing is exactly what I described and is, in fact,
what it happening... but to say I don't ever need to do this?  Well...
yes... I need to do this... and it has nothing to do with the garbage
collector.
 
Here, let me explain in another way....
 
I have a custom object... lets say it's a Person object.  It has various
properties, but several are Date types.  These are all consecutive, like
a workflow, and I want to be able to address them in order via an
array... like this...
 
var person : Person = new Person();
 
person.wakeup = new Date();
person.breakfast = new Date();
person.lunch = new Date();
person.dinner = null;
person.bedtime = null;
 
var timeArr : Array = new Array();
 
timeArr[0] = person.wakeup;
timeArr[1] = person.breakfast;
timeArr[2] = person.lunch;
timeArr[3] = person.dinner;
timeArr[4] = person.bedtime;
 
 
Then some other code figures out where we are in the flow of the day's
events...
 
var status : int;
if (some criteria)
      {  event = 2;  }
 
But I determine lunch hasn't actually happened yet, so it shouldn't have
a Date yet.  I need to blank out this value that was previously set in
the Person object...
 
if (some criteria)
     {  timeArr[event] = null;  }
 
But since these references don't seem to propogate backwards, nulling
one of the array elements doesn't affect the original property.  That's
the *whole purpose* of reference vs value... a reference is a pointer to
memory space... so if I null that memory space it should affect all the
vars pointing to that memory space.
 
Does that make more sense?

Darren






________________________________________________________________________

To: flexcoders@yahoogroups.com
From: [EMAIL PROTECTED]
Date: Thu, 17 Jul 2008 11:30:29 +1000
Subject: Re: [flexcoders] Array reference vs values


When you do this:

  var date:Date = new Date();

You're creating an instance of Date and a reference to it named "date".

When you do this:

  var ref:Date = arr[0] as Date;

You're creating another reference to the same instance, this time your
reference is named "ref". So when you set ref = null, you're making
"ref" point to nothing. "date" and "arr[0]" remain unchanged. You don't
need to, nor can you remove the date instance created above. That's the
job of the garbage collector.

-Josh

On Thu, Jul 17, 2008 at 11:25 AM, Darren Houle <[EMAIL PROTECTED]>
wrote:
        This might be a basic AS question, but I encountered it building
        a
        Flex app, so...
        
        I create a Date
        
               var date:Date = new Date();
        
        I create an Array
        
               var arr:Array = new Array();
        
        I set the first element of the array equal to the date
        
               arr[0] = date;
        
        I create another date variable that refers to the first array
        element
        
               var ref:Date = arr[0] as Date;
        
        if I trace("date="+date+", arr[0]="+arr[0]+", ref="+ref) I get
        
        date=Wed Jul 16 21:04:45 GMT-0400 2008, arr[0]=Wed Jul 16
        21:04:45
        GMT-0400 2008, ref=Wed Jul 16 21:04:45 GMT-0400 2008
        
        Now I null out the ref variable
        
               ref=null;
        
        Since AS uses references instead of values I would expect to
        null out
        the original date, but no...
        
        If I trace("date="+date+", arr[0]="+arr[0]+", ref="+ref) I now
        get
        
        date=Wed Jul 16 21:04:45 GMT-0400 2008, arr[0]=Wed Jul 16
        21:04:45
        GMT-0400 2008, ref=null
        
        I thought everything was a reference in AS?  Shouldn't nulling
        ref
        also null arr[0] which would null out date?
        
        Ultimately... I have a custom object that has several fields
        each
        containing a Date.  I create an array and make each element in
        the
        array = each Date in the custom obj.  I need to be able to null
        an
        array element and have it carry backwards into the object and
        null
        out the original Date.  Any ideas?  Am I missing something
        really
        obvious?
        
        
        ------------------------------------
        
        --
        Flexcoders Mailing List
        FAQ:
        http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
        Search Archives: http://www.mail-archive.com/flexcoders%
        40yahoogroups.comYahoo! Groups Links
        
        
        



-- 
"Therefore, send not to know For whom the bell tolls. It tolls for
thee."

:: Josh 'G-Funk' McDonald
:: 0437 221 380 :: [EMAIL PROTECTED] 


 


Reply via email to