2010-02-25 2 views
5

Это требование хорошего кода TCL? Что произойдет, если мы не будем использовать ключевое слово «unset» в скрипте? О каких-либо болезненных явлениях, о которых я должен знать?Нужно ли нам «отменять» переменные в TCL?

Я наследую какой-то унаследованный код, и ошибки, возникающие из-за «неустановленных» несуществующих переменных, заставляют меня встать на стену!

ответ

8

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

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

+0

нет утечек памяти или как. Просто то, что я надеялся услышать! Теперь я могу запретить эти идиотские «неустановленные» во всем коде. Да, глядя на это сейчас, мне кажется, что для меня тоже важнее защитное программирование. Тем не менее, в моем случае это похоже на «слишком много» защиты. «информация существует» - это новое для меня - спасибо! – chronodekar

2

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

unset -nocomplain foo

, который будет снята с охраны Foo, если она существует, но не будет жаловаться, если это Безразлично «т.

Джефф

0

В записке, как я не кажется, способны комментировать «Информация существует» выше;

Я использую эту форму часто ..

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

Зависит от системы статистики может дать «не смогло выделить байты» вопрос, как и когда ваш сценарий хранения больших объемов данных в переменные и массивы. он сломается после того, как кеш или оперативная память будут заполнены, сказав «не удалось выделить байты XXXXXXXX».

Убедитесь, что вы не хранить, что много данных в переменных, в противном случае не делать сняты с охраной после того, как использование более для соответствующих наборов данных (переменных)