|
<< 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.