мы должны “сбросить” переменные в TCL?

Действительно ли это - требование хорошего кода TCL? Что произошло бы, если мы не используем ключевое слово "сброса" в сценарии? Какие-либо вредные воздействия я должен знать о?

Я наследовал некоторый унаследованный код и ошибки, которые появляются должные "сбросить" - луг, несуществующие переменные управляют мной стена!

5
задан chronodekar 25 February 2010 в 05:42
поделиться

3 ответа

Можно определить существует ли переменная до ее использования, используя команду информация существует . Убедитесь, что если вы не используете unset , то не нарушите логику программы где-то еще.

Нет никаких специфических для Tcl причин для сброса переменной, то есть это не вызовет утечки памяти, исчерпания дескрипторов переменных или чего-то подобного. Использование unset может быть защитной практикой программирования, потому что это предотвращает будущее использование переменной после того, как она больше не актуальна. Не зная больше о точном коде, с которым вы работаете, трудно дать более подробную информацию.

9
ответ дан 13 December 2019 в 05:34
поделиться

В дополнение к другим ответам, если ваша версия Tcl достаточно новая, вы также можете использовать:

unset -nocomplain foo

Это снимет значение foo, если оно существует, но не будет жаловаться, если его нет.

Jeff

2
ответ дан 13 December 2019 в 05:34
поделиться

Для заметки, поскольку я не могу прокомментировать "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."
}
0
ответ дан 13 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: