Szukaj…


Składnia

  • ustawić varName ? wartość?
  • rozbrojony? -skarga ? ? -? ? varName varName varName ?
  • wstawia $ varName
  • puts [set varName ]
  • zmienna varName
  • global varName ? varName varName ?

Uwagi

  • Parametry zawarte w ? ...? takie jak ? varName? reprezentują opcjonalne argumenty dla komendy Tcl.
  • Dokumentacja: globalna , upvar

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
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow