Est-ce une exigence de bon code TCL? Que se passerait-il si nous n'utilisions pas le mot clé "unset" dans un script? Les effets néfastes que je devrais connaître? Je hérite d'un code hérité et les erreurs qui surviennent en raison de variables "non configurées" inexistantes me font remonter le mur!Avons-nous besoin de "désactiver" les variables dans TCL?
Répondre
Il est possible de déterminer si une variable existe avant de l'utiliser, en utilisant la commande info exists
. Assurez-vous que si vous n'utilisez pas unset
, vous ne dérangez pas la logique du programme ailleurs. Il n'y a pas de raison spécifique à Tcl pour unset
une variable, c'est-à-dire qu'elle ne va pas causer de fuite de mémoire ou de manque de poignées variables ou de quelque chose de fou comme ça. L'utilisation de unset
peut être une pratique de programmation défensive, car elle empêche l'utilisation future d'une variable après qu'elle n'est plus pertinente. Sans en savoir plus sur le code exact avec lequel vous travaillez, il est difficile de donner des informations plus détaillées.
Outre les autres réponses, si votre version Tcl est assez nouveau, vous pouvez également utiliser:
unset -nocomplain foo
qui va unset foo si elle existe, mais ne vous plaindrez pas si elle doesn 't.
Jeff
Pour que je note ne semble pas en mesure de commenter la « info existe » ci-dessus;
J'utilise cette forme souvent ..
if { [info exists pie] && [$pie == "ThisIsWhatIWantInPie"]} {
puts "I found what I wanted in pie."
} else {
puts "Pie did not exist; but I still did not error,TCL's evaluation \
will see the conditional failed on the [info exists] and not \
continue onto the comparison."
}
dépend du système stats, il peut donner « incapable d'allouer octets » problème au fur et à votre script stocke d'énormes données dans les variables et les tableaux. il se casse une fois que le cache ou la RAM est plein disant "impossible d'allouer XXXXXXXX octets".
Assurez-vous de ne pas stocker ces données dans beaucoup de variables, sinon faire unset une fois l'utilisation est terminée pour les jeux de données respectifs (variables)
Aucune fuite de mémoire ou comme. Juste ce que j'espérais entendre! Maintenant, je peux interdire ces "idiots" idiotes dans tout le code. Oui, en regardant maintenant, semble plus de programmation défensive à moi aussi. Pourtant, dans mon cas, cela ressemble un peu à "trop" de défense. "info existe" est nouveau pour moi - merci! – chronodekar