Hi List,

Warning, this is a long post!

As often while coding some practical actions, I am faced with fundamentals questions.
I have some workarounds available, and it is not a matter of doing things.
What matters is understanding fully what I am doing and there is no better place to 
ask...

The context. My final purpose is to store in a block some faces from a layout.
These faces are extracted from the layout with something like this:

foreach face favorite/pane [
        if 'fav = face/user-data [append my-favorite :face]
]

The idea is to be able to get to these faces without the need of a variable. 
For now and as far as I can tell it works but ... 

In a previous version of my code, I was not using the get-word :face but just

    [append my-favorite face]

... and it was working the same (AFAICT).

So my questions are: 
- Do I need the get-word?
- Is there a difference in the result?

To investigate on this matter, I have tried the following console session:

>> a: "Hello"
== "Hello"
>> b: "world!"
== "world!"

;
; this is my fake pane
;


>> fakepane: reduce [a b]
== ["Hello" "world!"]

;
; I am going to build two copies of fakepane
;


>> copypane1: copy []
== []
>> copypane2: copy []
== []

;
; one copy without using the get-word
;
>> foreach f fakepane [append copypane1 f]
== ["Hello" "world!"]

; one copy with the get-word

>> foreach f fakepane [append copypane2 :f]
== ["Hello" "world!"]

;
; I am changing 'a the wrong way
;

>> a: "Salut"
== "Salut"

;
; There are no changes in any block
;

>> fakepane
== ["Hello" "world!"]
>> copypane1
== ["Hello" "world!"]
>> copypane2
== ["Hello" "world!"]

;
; I think I understand this:
; a now points to a new location holding the string "Salut"
; but the block still point to the old location where the string "Hello" is.
; 

;
; a smarter change (I think)
;

>>
>> clear b
== ""
>> append b "Le monde!"
== "Le monde!"

;
; now all blocks are changed
;

>> fakepane
== ["Hello" "Le monde!"]
>> copypane1
== ["Hello" "Le monde!"]
>> copypane2
== ["Hello" "Le monde!"]

;
; what is the difference between copypane1 copypane2
;

; there are not the same
; that I understand as they are not sharing the same location in memory

>> same? copypane1 copypane2
== false

; but there are equal
; that I understand as the contents are identical

>> equal? copypane1 copypane2
== true

; contents are equal and the same

>> same? copypane1/1 copypane2/1
== true
>> same? copypane1/2 copypane2/2
== true
>> equal? copypane1/1 copypane2/1
== true
>> equal? copypane1/2 copypane2/2
== true

two syntaxes, the same results, what am I missing ?

Regards
Patrick



-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to