Ces valeurs commenceront probablement en tant que chaînes (ce n'est pas entièrement certain que cela se produira, en raison de la possibilité de partage littéral). Examinons de près (si vous le faites vous-même, la commande tcl::unsupported::representation
est en 8.6 seulement et jamais modifie l'objet en cours de regard, je mets un ;format x
sur cette première ligne pour m'assurer que nous n'obtenons aucune surprise conversions).
% set value [list "12" 14 2a "1a"];format x
x
% tcl::unsupported::representation [lindex $value 0]
value is a pure string with a refcount of 2, object pointer at 0x100874070, string representation "12"
% tcl::unsupported::representation [lindex $value 1]
value is a pure string with a refcount of 2, object pointer at 0x1008741c0, string representation "14"
% tcl::unsupported::representation [lindex $value 2]
value is a pure string with a refcount of 2, object pointer at 0x100874c40, string representation "2a"
% tcl::unsupported::representation [lindex $value 3]
value is a pure string with a refcount of 2, object pointer at 0x1008743d0, string representation "1a"
% tcl::unsupported::representation $value
value is a list with a refcount of 4, object pointer at 0x100874910, internal representation 0x1008eb050:0x0, string representation "12 14 2a 1a"
Alors oui, ces valeurs sont à peu près les mêmes. Il n'y a aucune représentation interne de l'un d'entre eux, et la représentation de chaîne que chacun utilise est un tampon qui a été alloué pour être long de 3 octets (un pour chaque caractère, et un pour un octet NUL final). Cependant, la liste elle-même a une représentation sous forme de chaîne (ainsi que sa liste interne) même si on ne lui en demande pas; C'est parce que vous utilisez une liste de littéraux et le compilateur de Tcl optimise cela à un seul littéral car c'est habituellement la bonne chose à faire.
Je devrais l'espérer, puisque les guillemets sont enlevés avant que la commande obtienne ses arguments. –