Wywołania przez referencję: upvar

<< Kliknij, aby wyświetlić Spis treści >>

Nawigacja:  Dodatki > TCL > Procedury >

Wywołania przez referencję: upvar

Polecenie upvar jest ogólnym mechanizmem dostępu do zmiennych poza kontekstem procedury. Może ono być użyte do dostępu zarówno do zmiennych globalnych jak i do zmiennych lokalnych wewnątrz aktywnych procedur. Polecenie upvar jest najczęściej używane do przekazywania przez referencję argumentów będących tablicami. Jeśli a jest tablicą, nie można jej przekazać do procedury w sposób "myproc $a", ponieważ tablica jako całość nie jest reprezentowana przez jedną wartość. Można natomiast przekazać do procedury nazwę tablicy, "myproc a", i użyć polecenia upvar aby dostać się do poszczególnych elementów tablicy z wnętrza procedury:

par parray name {

        upvar $name a

        foreach el [lsort [array names a]] {

            puts "$el = $a($el)"

        }

    }

    set info(age) 37

    set info(position) "Vice President"

    parray info

     age = 37

    positin = Vice President

Gdy procedura parray jest wywoływana, otrzymuje jako argument nazwę tablicy. Następnie polecenie upvar zapewnia dostęp do tej tablicy z wnętrza procedury poprzez zmienną a. Pierwszym argumentem upvar jest nazwa zmiennej dostępnej z poziomu skryptu wywołującego procedurę. Drugi argument to nazwa zmiennej lokalnej procedury. upvar przekierowuje wszystkie odwołania do zmiennej lokalnej i przesyła je do zmiennej zewnętrznej. W powyższym przykładzie oznacza to, że odwołania do zmiennej a są w rzeczywistości odwołaniami do zmiennej globalnej info.