On Thu, Nov 26, 2015 at 5:28 PM, Sankaranarayanan Viswanathan
<rationalrev...@gmail.com> wrote:
> Hi,
>
> I'm having trouble understanding the behavior below:
>
> Running the code below on the listener:
>
> TUPLE: test a b c ;
> : <test> ( -- t ) { 1 2 } { 3 4 } { 5 6 } test boa ;
> : f1 ( -- ) <test> . ;
> : f2 ( -- ) <test> a>> [ [ 10 0 ] dip set-nth ] [ [ 20 1 ] dip set-nth ] bi ;
>
> f1
> ! outputs T{ test { a { 1 2 } } { b { 3 4 } } { c { 5 6 } } }
>
> f2 f1
> ! outputs T{ test { a { 10 20 } } { b { 3 4 } } { c { 5 6 } } }
>
> Why is the mutation on a separate tuple instance impacting another?
The mutation on the second tuple is "affecting" the first tuple
because they both have references to the same arrays.

> Am I doing something incorrectly?
When you write "{ 1 2 }" in the source code, only one array is
created. The idiom if you need separate objects each time the function
runs is to use "{ 1 2 } clone".

I didn't find where this is described with a quick search in the docs
, but one place where this is mentioned is at the end of the vector
article http://docs.factorcode.org/content/article-vectors.html
"
If you don't care about initial capacity, an elegant way to create a
new vector is to write:
V{ } clone
"

Cheers,
Jon

------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741551&iu=/4140
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to