Comme les deux PTR et tampons sont des pointeurs à un nombre entier de données, vous attribuez simplement un à l'autre:
ptr: buffer
La syntaxe :variable
est uniquement nécessaire pour obtenir le adresse de ce que l'on pourrait appeler des types "primitifs" en Java. Cela équivaut à byte !, integer !, float !, float32! et logique! dans la version actuelle de Red/System. Sans le :
, le compilateur fournira la valeur stockée dans la variable.
Tous les autres types tels que c-string! et struct! (et donc alias!) sont en fait des pointeurs. Ainsi, le compilateur fournit leur valeur lorsqu'ils sont référencés, ce qui est une adresse mémoire.
Lorsque vous faites référence à un mot, le compilateur rouge/système fournit la valeur stockée dans le:
print i ;; will print the value stored in i
Lorsque vous utilisez un jeu de mots (une variable avec un :
ajouté au nom), le compilateur stocke une valeur en elle:
i: 1 ;; stores 1 in variable i
Lorsque vous utilisez un get-mot (une variable avec un :
inséré au début du nom), le compilateur fournit l'adresse de la variable.
int-ptr: :i ;; stores the address of i in int-ptr
Notez que ':' n'est PAS un * get "operator" *. Ce n'est pas un opérateur du tout. Par conséquent, vous ne pouvez pas combiner des deux-points pour obtenir un get-of-a-get («:: buffer») ni mettre un espace («: buffer»). Cela rejoint pourquoi Rebol et Red sont si différents des autres langues. Un «:» est un signal qui signifie que le symbole que vous décorez est «aromatisé» comme un GET-WORD !. Malgré la disponibilité de ces "saveurs" (plus que Lisp a, de loin), c'est toujours quelque chose qui est traité symboliquement. Rebol/Red les traite d'une manière déguisée comme une langue "normale", mais vos propres dialectes peuvent faire autrement! – HostileFork