I think what he's asking is why is it when he points to

ac = new ArrayCollection();

say to for example address 1... but then later tells ActionScript

ac = event.result.products.rug;

and the address changes to 2

I think he was expecting ac to still point to address 1... but with
the value of address 2 ( copied basically )

I might be wrong but as far as I know... unlike C/C++... AS3 isn't
fully native like C/C++ so... allocating/deallocating memory is going
to be slower... it's faster for the Flash player to allocate new
memory, change the address to the new memory, dump the old address in
garbage ( for to be garbage collected later ) rather than reallocating
the memory... also AS3 doesn't exactly work like C/C++ anyways just
like some other languages like PHP

On Nov 9, 2007 10:02 PM, Gordon Smith <[EMAIL PROTECTED]> wrote:
>
>
>
>
>
>
>
> Object references in ActionScript are like C pointers, not like C
> references. The statement
>
>
>     ac = event.result.products.rug;
>
> changes the pointer ac so that instead of pointing to the ArrayCollection
> that you new'd, it now points to the rug.
>
> By the way, this makes no sense since ac is typed as an ArrayCollection,
> while products.rug is presumably NOT an ArrayCollection. The compiler can't
> report this error because it doesn't know what type event.result is. If the
> result object has some type, you should cast it:
>
>     ac = SomeResultClass(event.result).products.rug
>
>
> > why can I not directly manipulate my original object from within the
> function?
>
> You can access and change the state of that object within the function.. For
> example, within the function you can do things like
>
>     ac.addItem()
>     trace(ac.length)
>
> to manipulate your ArrayCollection. But if you want your function to make
> collectionAC point to a different object, you must write
>
>     collectionAC = ...
>
> inside that function.
>
> Does that help?
>
> - Gordon
>
>  ________________________________
>  From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of quiet.mountain
> Sent: Friday, November 09, 2007 10:19 AM
> To: [email protected]
> Subject: [flexcoders] Re: Reference variables / pointers / hex heap
> addresses
>
>
>
>
>
>
>
>
> Hi,
>
> Thanks for the reply, and yes I am coming from a c background.
>
> Even though "the address itself is passed by value" (passing a pointer by
> copy) the result is still a locally scoped function variable that points to
> the original object (see debug comments below).
>
> "so you cannot change it [the address]"  I don't think I want to change it
> (the value of the class reference variable that points to the original
> object). I want to make changes to the original object itself (which I now
> have an address for via the pointer passed by copy).
>
> My question is why does the value of this locally scoped function variable
> automatically change to point to a newly created object of the same type
> when I attempt to make changes to it (see debug comments below).
>
> Or to put it another way. If my locally scoped function variable is now
> actually pointing to my original object why can I not directly manipulate my
> original object from within the function?
>
> Thanks, Rich
>
>
>
> --- In [email protected], "Ralf Bokelberg" <[EMAIL PROTECTED]>
> wrote:
> >
> > Hi Rich
> >
> > Are you coming from a c background?
> > Logically a object parameter is passed by reference, which means, the
> > address is passed to the method instead of a copy of the object's
> > values.
> > Technically the address itself is passed by value though, so you
> > cannot change it.
> >
> > Cheers
> > Ralf.
> >
> > On Nov 9, 2007 1:03 PM, quiet.mountain <[EMAIL PROTECTED]> wrote:
> > >
> > >
> > >
> > >
> > >
> > >
> > > Hi,
> > >
> > >  I've read through all of the posts here on pointers and also this
> > >  page - http://www.mischel.com/diary/2006/07/24.htm, but can someone
> > ! >  clear up something that's been bothering me please?
> > >
> > >  Can a function change the value of a non-primitive type that's passed
> > >  as a parameter?
> > >
> > >  If I pass a reference to an object as a function parameter, the local
> > >  function variable then holds the address of the object on the heap.
> > >  Fine.
> > >
> > >  If I then attempt to make changes to this object within the function,
> > >  the address of the local function reference variable changes to
> > >  another address on the heap and creates a new object. The original
> > >  object is not updated. We end up with two reference variables
> > >  pointing to two different objects on the heap.
> > >
> > >  I thought the point of "pass by reference" for non-primitives in AS3
> > >  was to be able to manipulate objects! directly by passing the hex
> > >  address of the! object on the heap (as in c++)
> > >
> > >  I understand that a solution is to return the local reference to the
> > >  temporary object from the function and assign it to the class
> > >  instance variable, so this is more an exercise in understanding the
> > >  essential workings of AS3.
> > >
> > >  Here's some code.
> > >
> > >  ----- AS3 Code starts -----
> > >
> > >  private var collectionAC:ArrayCollection = new ArrayCollection();
> > >  // Debug: value of collectionAC is @4deb859
> > >
> > >  private function resultHandler(event:ResultEvent, ac:ArrayCollection)
> > >  {
> > >  // Debug: value of ac is also @4deb859
> > >  // There are now 2 reference variables pointing to
> > >  // one object on the heap
> > >
> > >  ac = event.result.prod! ucts.rug;
>
>
> > >
> > >  // Debug: value of ac is now @4f839e1
> > >  // ?WHY? does this line create a new object scoped to
> > >  // the function and not modify the original object directly?
> > >  }
> > >
> > >  ------ MXML code starts ----------
> > >
> > >  <mx:HTTPService id="collectionService"
> > >  url="data/collection.xml"
> > >  result="resultHandler(event, collectionAC);"/>
> > >
> > >  ------ Code ends --------
> > >
> > >  Many thanks, Rich
> > >
> > >
> >
> >
> >
> > --
> > Ralf Bokelberg <[EMAIL PROTECTED]>
> > Flex & Flash Consultant based in Cologne/Germany
> > Phone +49 (0) 221 530 15 35
> >
>
>
>
>  

Reply via email to