datatype dans les blocs
drikc27-Aug-2007/18:37:09+2:00
bonjour à tous,

qqchose me suprend pour les datatypes dans les blocs:
-----------------
>> b: [none true 1 "drikc" %drikc.htm $69]
== [none true 1 "drikc" %drikc.htm $69]
>> forall b [ print type? b/1 ]
word
word
integer
string
file
money
-----------------

Pourquoi 'none' et 'true' sont-ils typés comme word! à l'intérieur du bloc? Y'en a-t-il d'autres?
Y'a-t-il une hiérarchie de typage ou qqchose que je devrais savoir?
Enfin ça surprend!

merci et à bientôt!
Goldevil27-Aug-2007/22:17:11+2:00
Rajoute cela à la fin de script :

-----------------------
>> c: reduce b
== [none true 1 "drikc" %drikc.htm $69.00]
>> forall c [ print type? c/1 ]
none
logic
integer
string
file
money
------------------------

Il faut donc bien comprendre que par défaut un bloc n'est pas évalué. Reduce remplace chaque élément par sa valeur et c'est seulement après cela que le mot clé "none" est remplacé par la valeur none.

Je suis d'accord, ça semble tordu. Mais c'est une partie intrinsèque du langage et c'est très utile.

Regarde le code suivant:

------------------------
>> mycode: [ print a]
== [print a]
>>
>> forall mycode [ print type? mycode/1 ]
word
word
>> a: "Hello"
== "Hello"
>>
>> reduce mycode
Hello
== [unset]
>> do mycode
Hello
------------------------

Si le bloc était immédiatement évalué, il y aurait une erreur dès la première ligne. En effet, a n'était pas encore défini, et l'instruction print aurait fonctionner.

En fin de compte, si ce n'était pas le cas, Rebol serait beaucoup moins utile.
drikc28-Aug-2007/13:04:58+2:00
j'ai complètement compris et tout est logique maintenant. merci pour l'explication.

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2