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] <mailto:[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
<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