2010-02-25 8 views
5

Czy jest to wymaganie dobrego kodu TCL? Co by się stało, gdybyśmy nie używali słowa kluczowego "unset" w skrypcie? Jakieś złe efekty, o których powinienem wiedzieć?Czy potrzebujemy "odprawić" zmienne w TCL?

Odziedziczę jakiś staroświecki kod, a błędy, które powstają z powodu "nie ustawionych" nieistniejących zmiennych, prowadzą mnie do ściany!

Odpowiedz

8

Możliwe jest określenie, czy zmienna istnieje przed użyciem, przy użyciu polecenia info exists. Upewnij się, że jeśli nie używasz unset, nie zakłócasz logiki programu w innym miejscu.

Nie ma powodu specyficznego dla Tcl do unset zmiennej, to znaczy, że nie spowoduje to przecieku pamięci lub wyczerpania zmiennych uchwytów lub czegoś szalonego. Używanie unset może być defensywną praktyką programistyczną, ponieważ uniemożliwia wykorzystanie zmiennej w przyszłości, gdy przestaje być istotne. Nie wiedząc więcej o dokładnym kodzie, z którym pracujesz, trudno jest podać bardziej szczegółowe informacje.

+0

ma wycieków pamięci lub podoba. Właśnie to miałem nadzieję usłyszeć! Teraz mogę zakazać tym idiotycznym "rozbrajaniem" w całym kodzie. Tak, patrząc na to teraz, wydaje mi się, że jest to również bardziej programowanie obronne. Jednak w moim przypadku wygląda to trochę "za dużo" obrony. "info exists" jest dla mnie nowością - dzięki! – chronodekar

2

W uzupełnieniu do innych odpowiedzi, jeśli wersja Tcl jest na tyle nowy, można również użyć:

unset -nocomplain foo

że będzie rozbrojony foo jeśli istnieje, ale nie będzie narzekać, jeśli nie robi "t.

Jeff

0

Dla nocie jak nie wydają w stanie wypowiedzieć się na temat „info istnieje” powyżej;

używam tej formy często ..

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

zależy od systemu statystyki może to dać „nie może przydzielić bajtów” problem, jak i kiedy skrypt jest przechowywanie ogromnych danych do zmiennych i tablic. rozerwie się, gdy pamięć podręczna lub pamięć RAM są pełne, mówiąc "nie można przydzielić XXXXXXXX bajtów".

Upewnij się, że nie jesteśmy przechowywania dużo danych do zmiennych, inaczej zrobić rozbrojony raz stosowanie jest skończona dla poszczególnych zestawów danych (zmiennych)