2010-02-25 8 views
5

¿Es un requisito de buen código TCL? ¿Qué pasaría si no usamos la palabra clave "unset" en un script? ¿Algún mal efecto que debería saber?¿Necesitamos "desarmar" variables en TCL?

Estoy heredando algún código heredado y los errores que surgen debido a las variables inexistentes "sin set-up" me están volviendo loco.

Respuesta

8

Es posible determinar si existe una variable antes de usarla, utilizando el comando info exists. Asegúrese de que si no está usando unset, no altere la lógica del programa en otro lugar.

No hay razón específica de Tcl para unset una variable, es decir, no va a causar una pérdida de memoria o quedarse sin controladores variables o algo así de loco. El uso de unset puede ser una práctica de programación defensiva, ya que impide el uso futuro de una variable una vez que ya no es relevante. Sin saber más sobre el código exacto con el que está trabajando, es difícil proporcionar información más detallada.

+0

No hay pérdidas de memoria o les gusta. ¡Justo lo que esperaba escuchar! Ahora puedo prohibir esos idiotas "desarmados" en todo el código. Sí, mirándolo ahora, parece más programación defensiva para mí también. Aún así, en mi caso, parece un poco "demasiado" de defensa. "la información existe" es nuevo para mí, ¡gracias! – chronodekar

2

Además de las otras respuestas, si su versión de Tcl es bastante nueva, también se puede utilizar:

unset -nocomplain foo

que va a foo desactivada si es que existe, pero no se quejará si él doesn 't.

Jeff

0

Por nota, ya que no parecen ser capaces de hacer comentarios sobre la "información existe" más arriba;

utilizo esta forma a menudo ..

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

depende del sistema de Estadísticas puede dar "no puede asignar bytes" cuestión como y cuando la secuencia de comandos es el almacenamiento de datos de gran tamaño en variables y matrices. se romperá una vez que el caché o la memoria RAM estén llenos y diga "no se pueden asignar bytes XXXXXXXX".

Asegúrese de que no está almacenando que muchos datos en variables, de lo contrario, una vez desactivada la utilización se ha acabado para los respectivos conjuntos de datos (variables)