[REBOL] : [] in a function => was {Re: Re: to-char}
From: jason:cunliffe:verizon at: 13-Feb-2002 20:44
From: "Carl Read" <[carl--cybercraft--co--nz]>
> > What is going on when I call it within a function and then call the
> > function repeatedly [when the previous values remain]. ie: why do I
> > _really_ need clear or copy?
>
> The reason can be seen in the above, in that it remains the same
> block. Meaning you haven't made a copy of the block. Continuing on
> with the above, this shows the difference 'copy makes...
Carl..thanks
ok. This is what I still don't deeply get:
>> someblock: []
== []
>> append someblock "a"
== ["a"]
>> append someblock "b"
== ["a" "b"]
>> append someblock "c"
== ["a" "b" "c"]
>> someblock: []
== []
>> someblock
== []
>> head someblock
== []
BUT.. when I do the same thing within a script function:
change-block: func [str [string!] /local someblock][
someblock: []
append someblock str
return someblock
]
>> change-block "hello"
== ["hello"]
>> change-block "goodbye"
== ["hello" "goodbye"]
Q: Why, at the console does someblock: [] create a fresh block, but within a
script function someblock: [] persists and needs to be remedied by
copy [], clear [] or make block! 123 statements?
> More on functions: A series is created when the function is first
> created and not each time the function is called, which is why what's
> in a series will persist from function-call to function-call unless
> you specifically clear it or make a copy of it. Whether to use 'copy
> or 'clear (or neither for that matter) will depend on the behaviour
> you want from the series.
aha!..er..hmm, but this sounds like the second time I call my change-block
function, it is sees 'someblock: []' rebol says "oh I already got that", yet
when it reads copy, clear make it changes its mind and redfines someblock?
This seems pretty inconsistent to me. I know how to use it, but want to grok
further rebolzen. Please keep trying to explain me this rudiment..
thanks again
./Jason