Действительно ли это - требование хорошего кода TCL? Что произошло бы, если мы не используем ключевое слово "сброса" в сценарии? Какие-либо вредные воздействия я должен знать о?
Я наследовал некоторый унаследованный код и ошибки, которые появляются должные "сбросить" - луг, несуществующие переменные управляют мной стена!
Можно определить существует ли переменная до ее использования, используя команду информация существует
. Убедитесь, что если вы не используете unset
, то не нарушите логику программы где-то еще.
Нет никаких специфических для Tcl причин для сброса
переменной, то есть это не вызовет утечки памяти, исчерпания дескрипторов переменных или чего-то подобного. Использование unset
может быть защитной практикой программирования, потому что это предотвращает будущее использование переменной после того, как она больше не актуальна. Не зная больше о точном коде, с которым вы работаете, трудно дать более подробную информацию.
В дополнение к другим ответам, если ваша версия Tcl достаточно новая, вы также можете использовать:
unset -nocomplain foo
Это снимет значение foo, если оно существует, но не будет жаловаться, если его нет.
Jeff
Для заметки, поскольку я не могу прокомментировать "info exists" выше;
Я часто использую эту форму...
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."
}