Hi Robert,

thank you for your reply. I am still confused. After reading your reply
repeatedly and quite thoroughly, I think that the key understanding what
you mean is this quote:

>[...] the declaration of a value has/is a name.

It leads me to suspect that you believe that there are two different things
happening here with respect to the relationship between the words (i.e. 'a
and 'c) and the values they reference:

1) Constructing a value
a: make block! [1 2 3]

2) Assigning a value
b: make block! []
insert b make block! [1 2 3]
c: first b

'a and 'c stand in the exact same relationship to their respective values.
Specifically, a does not have an implied name that could be exposed as
a/name and would evaluate to 'a, and 'c does not have an implied name which
would evaluate to none, if exposed. 

In 1) Constructing a value, first the value is constructed, then the word
'a is assigned to the value, that has already been constructed. The fact
that eventually the constructed block will be referenced by 'a in no way
influences the construction of that block. By the time REBOL is ready to
assign 'a as a reference to the block [1 2 3], the construction process is
completed and has no affect on the subsequent assignment of 'a as a
reference to the block.

The exact same thing happens in 2) Assigning a value. How the value that 'c
will be referencing becomes available to REBOL is different, in as much as
that value will not be constructed immediately before the assignment is
executed. Rather the value is retrieved by using the word first on the
block 'b. By the time the assignment is executed, the value, namely the
block contained in 'b, has become available and 'c is created as a
reference to that value. 

Even though 'a is assigned as a reference to the value directly returned by
make whereas 'c is assigned to a value that was previously created and
stored in 'b, the assignment process of 'c to the block [1 2 3] is
identical to the process in which 'a is assigned to the freshly created
block. The close proximity between 'a and make does not modify either the
assignment of 'a to the block, nor does it influence the creation process
of that block!

In summary, in both cases the value is already available for the assignment
of the word as a reference, by the time REBOL applies the colon operator.
During the assignment of the words ('a or 'c) as references to the block
the process by which the value became available is no longer relevant.

Therefore, 'a is not a "name" of anything. It is not an attribute of
something. It is simply a word referencing a value just as b is.

With respect to the problem you are trying to solve, what do you lose by
doing the following?

all-my-objects: make block! []

obj1: ... append all-my-objects self
obj2: ...
...
objN: ...

do-something: func [] [
        foreach obj all-my-objects [
                do obj/Create
...

There is no point in saying that obj loses its name. It never has a name
anyway!

Elan

Reply via email to