[REBOL] Re: Block Creation Re:
From: joel:neely:fedex at: 19-Oct-2000 10:21
Hi, Carl,
Carl Read wrote:
> Thanks for all the replies on this everyone - I'm a little the wiser
> now.
>
I'm glad to see from the replies that other folks can do a better job
of reading the entire question than I did... ;-) Sorry if my first
answer was a bit too hasty!
> It was in a function I noticed the difference and I can see how it'd
> be useful to be able to create a new block with the first call of a
> function while having the subsequent calls not clear the block's
> contents.
>
At the risk of sounding picky, I think the wording of this sentence
may allow a misunderstanding of what's happening.
The "first call of a function" does *NOT* "create a new block". To
make a simple example. After evaluating...
phlarp: func [a [string!] /local b] [
b: []
append b a
]
...the literal block that is the second element of the body of PHLARP
is not a request for REBOL to create another empty block, it is *the*
empty block to which B is set.
Subsequent modifications to B are, via that reference, modifying the
literal block (second element of the body of PHLARP) to which B refers.
>> phlarp "hi"
== ["hi"]
>> source phlarp
phlarp: func [a [string!] /local b][
b: ["hi"]
append b a
]
> This is what I was actually trying to do...
>
> block: [[[]]]
>
> (for inserting stuff into later), and while the following works as I
> wanted...
>
> block: to-block "[[]]"
>
> I notice that this doesn't...
>
> block: to-block [[[]]]
>
> Because, I assume, the inner blocks are not created anew?
>
Almost. In the case of
block: [[[]]]
we are asking REBOL to set BLOCK to a particular block value that
already exists, where in
block: to-block "[[]]"
or
block: to-block [[[]]]
we are asking REBOL first to create a new block and then set BLOCK
to refer to it. Therefore, in
block: [[[]]]
it is actually the case that *none* of the blocks at *any* level of
nesting are being created anew.
Having said all of that, please critique my next post for another way
to approach this point. As it is the most F of FAQ for REBOL (as far
as I have observed on this list), I've been wrestling with the issue
for how to describe what's happening for quite some time.
-jn-
--
; Joel Neely [joel--neely--fedex--com] 901-263-4460 38017/HKA/9677
REBOL [] do [ do func [s] [ foreach [a b] s [prin b] ] sort/skip
do function [s] [t] [ t: "" foreach [a b] s [repend t [b a]] t ] {
| e s m!zauafBpcvekexEohthjJakwLrngohOqrlryRnsctdtiub} 2 ]