Szukaj…
Składnia
- ustawić varName ? wartość?
- rozbrojony? -skarga ? ? -? ? varName varName varName ?
- wstawia $ varName
- puts [set varName ]
- zmienna varName
- global varName ? varName varName ?
Uwagi
Przypisywanie wartości do zmiennych
Polecenie set służy do wartości przypisać w Tcl. Gdy zostanie wywołany z dwoma argumentami w następujący sposób,
% set tempVar "This is a string."
This is a string.
umieszcza drugi argument („To jest ciąg.”) w przestrzeni pamięci, do której odwołuje się pierwszy argument (tempVar). set zawsze zwraca zawartość zmiennej wymienionej w pierwszym argumencie. W powyższym przykładzie set zwróci „To jest ciąg znaków”. bez cudzysłowów.
- Jeśli podano wartość , wówczas zawartość zmiennej varName jest ustawiona na wartość .
- Jeśli varName składa się tylko ze znaków alfanumerycznych i nie zawiera nawiasów, jest to zmienna skalarna.
- Jeśli varName ma postać varName (indeks) , jest członkiem tablicy asocjacyjnej.
Zauważ, że nazwa zmiennej nie jest ograniczona do alfabetu łacińskiego, może składać się z dowolnej kombinacji znaków Unicode (np. Armeński):
% set տուն house
house
% puts ${տուն}
house
Scoping
set alpha 1
proc myproc {} {
puts $alpha
}
myproc
Ten kod nie działa, ponieważ dwa alfy mają różne zakresy.
Zestaw poleceń set alpha 1 tworzy zmienną w zakresie globalnym (co czyni ją zmienną globalną).
Komenda puts $alpha jest wykonywana w zakresie, który jest tworzony podczas wykonywania komendy myproc .
Dwa zakresy są różne. Oznacza to, że gdy puts $alpha próbuje wyszukać nazwę alpha , nie znajdzie żadnej takiej zmiennej.
Możemy to jednak naprawić:
proc myproc {} {
global alpha beta
puts $alpha
}
W tym przypadku dwie zmienne globalne, alpha i beta , są powiązane ze zmiennymi aliasowymi (o tej samej nazwie) w zakresie procedury. Odczytywanie ze zmiennych aliasowych pobiera wartość ze zmiennych globalnych, a zapisywanie do nich zmienia wartości z globalnych.
Mówiąc bardziej ogólnie, polecenie upvar tworzy aliasy do zmiennych z dowolnego z poprzednich zakresów. Może być używany z globalnym zasięgiem ( #0 ):
proc myproc {} {
upvar #0 alpha alpha beta b
puts $alpha
}
Aliasy mogą mieć tę samą nazwę, co zmienna połączona z ( alpha ) lub inną nazwą ( beta / b ).
Jeśli myproc z zakresu globalnego, ten wariant działa również:
proc myproc {} {
upvar 1 alpha alpha beta b
puts $alpha
}
Zakres numer 1 oznacza „poprzedni zakres” lub „zakres dzwoniącego”.
Chyba, że naprawdę wiesz, co robisz, #0 , 0 i 1 to jedyne zakresy, które mają sens w przypadku upvar . ( upvar 0 tworzy lokalny alias dla zmiennej lokalnej, a nie tylko operację określania zakresu).
Niektóre inne języki definiują zakres za pomocą nawiasów klamrowych i pozwalają kodowi działającemu w każdym zakresie zobaczyć wszystkie nazwy w otaczających zakresach. W Tcl jeden pojedynczy zakres jest tworzony po wywołaniu procedury i widoczne są tylko jego własne nazwy. Jeśli procedura wywołuje inną procedurę, jej zakres jest nakładany na poprzedni zakres i tak dalej. Oznacza to, że w przeciwieństwie do języków w stylu C, które mają jedynie zasięg globalny i zasięg lokalny (z podskopami), każdy zakres działa jako obejmujący (choć nie natychmiast widoczny) zakres dla dowolnego zakresu, który otworzył. Gdy procedura powraca, jej zakres jest niszczony.
Dokumentacja: globalna , upvar
Drukowanie wartości zmiennej
Aby wydrukować wartość zmiennej, takiej jak,
set tempVar "This is a string."
Argument w instrukcji puts poprzedzony jest znakiem $ , który mówi Tcl, aby użył wartości zmiennej.
% set tempVar "This is a string."
This is a string.
% puts $tempVar
This is a string.
Wywoływanie zestawu z jednym argumentem
set można również wywołać za pomocą tylko jednego argumentu. Po wywołaniu z jednym argumentem zwraca treść tego argumentu.
% set x 235
235
% set x
235
Usuwanie zmiennej / s
Polecenie unset służy do usuwania jednej lub więcej zmiennych.
unset ?-nocomplain? ?--? ?name name name name?
- Każda nazwa jest nazwą zmiennej określoną w dowolny sposób akceptowany przez polecenie
set. - Jeśli nazwa odnosi się do elementu tablicy, element ten jest usuwany bez wpływu na pozostałą część tablicy.
- Jeśli nazwa składa się z nazwy tablicy bez indeksu w nawiasach, cała tablica jest usuwana.
- Jeśli jako pierwszy argument podano -nocomplain , wszystkie możliwe błędy są pomijane w wynikach polecenia.
- Opcja - wskazuje koniec opcji i powinna być używana, jeśli chcesz usunąć zmienną o takiej samej nazwie jak każda z opcji.
% set x 235
235
% set x
235
% unset x
% set x
can't read "x": no such variable
Zmienne przestrzeni nazw
Polecenie variable zapewnia utworzenie danej zmiennej przestrzeni nazw. Dopóki nie zostanie mu przypisana wartość, wartość zmiennej jest niezdefiniowana:
namespace eval mynamespace {
variable alpha
set alpha 0
}
Dostęp do zmiennej można uzyskać spoza przestrzeni nazw (w rzeczywistości z dowolnego miejsca), dołączając do niej nazwę przestrzeni nazw:
set ::mynamespace::alpha
Dostęp można uprościć w ramach procedury, ponownie używając polecenia variable :
proc ::mynamespace::myproc {} {
variable alpha
set alpha
}
Spowoduje to utworzenie lokalnego aliasu dla zmiennej przestrzeni nazw.
W przypadku procedury zdefiniowanej w innym obszarze nazw nazwa zmiennej musi zawierać przestrzeń nazw w wywołaniu variable :
proc myproc {} {
variable ::mynamespace::alpha
set alpha
}