2010-02-25 13 views
5

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

8

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.

+0

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

2

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

0

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." 
} 
1

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)