Ricerca…
Sintassi
- imposta varName ? valore?
- disinserito? -nocomplain ? ? -? ? varName varName varName ?
- mette $ varName
- mette [set varName ]
- variabile varName
- varName globale? varName varName ?
Osservazioni
Assegnazione di valori a variabili
Il set comandi viene utilizzato per assegnare valori in Tcl. Quando viene chiamato con due argomenti nel modo seguente,
% set tempVar "This is a string."
This is a string.
pone il secondo argomento ("Questa è una stringa.") nello spazio di memoria a cui fa riferimento il primo argomento (tempVar). set restituisce sempre il contenuto della variabile nominata nel primo argomento. Nell'esempio precedente, set restituisce "This is a string". senza le virgolette.
- Se viene specificato un valore , il contenuto della variabile varName viene impostato uguale al valore .
- Se varName è composto esclusivamente da caratteri alfanumerici e nessuna parentesi, è una variabile scalare.
- Se varName ha la forma varName (index) , è un membro di una matrice associativa.
Si noti che il nome della variabile non è limitato all'alfabeto latino, può essere costituito da qualsiasi combinazione di caratteri unicode (ad esempio armeno):
% set տուն house
house
% puts ${տուն}
house
scoping
set alpha 1
proc myproc {} {
puts $alpha
}
myproc
Questo codice non funziona perché i due alfa sono in ambiti diversi.
Il comando set alpha 1 crea una variabile nell'ambito globale (che la rende una variabile globale).
Il comando puts $alpha viene eseguito in un ambito che viene creato quando myproc eseguito il comando myproc .
I due ambiti sono distinti. Ciò significa che quando puts $alpha prova a cercare il nome alpha , non trova alcuna variabile di questo tipo.
Possiamo sistemarlo, tuttavia:
proc myproc {} {
global alpha beta
puts $alpha
}
In questo caso due variabili globali, alpha e beta , sono collegate a variabili alias (con lo stesso nome) nell'ambito della procedura. La lettura delle variabili alias recupera il valore nelle variabili globali e la scrittura su di esse modifica i valori nei globali.
Più in generale, il comando upvar crea alias alle variabili da uno qualsiasi degli ambiti precedenti. Può essere utilizzato con l'ambito globale ( #0 ):
proc myproc {} {
upvar #0 alpha alpha beta b
puts $alpha
}
Gli alias possono avere lo stesso nome della variabile che è collegata a ( alpha ) o un altro nome ( beta / b ).
Se chiamiamo myproc dall'ambito globale, questa variante funziona anche:
proc myproc {} {
upvar 1 alpha alpha beta b
puts $alpha
}
L'ambito numero 1 significa "l'ambito precedente" o "l'ambito del chiamante".
A meno che tu non sappia veramente cosa stai facendo, #0 , 0 e 1 sono gli unici ambiti che hanno senso usare con upvar . ( upvar 0 crea un alias locale per una variabile locale, non strettamente un'operazione di scoping).
Alcuni altri linguaggi definiscono l'ambito mediante parentesi graffe e lascia che il codice in esecuzione in ogni ambito veda tutti i nomi negli ambiti circostanti. In Tcl viene creato un singolo ambito quando viene chiamata una procedura e sono visibili solo i suoi nomi. Se una procedura chiama un'altra procedura, il suo ambito è impilato sopra l'ambito precedente e così via. Ciò significa che, contrariamente ai linguaggi in stile C che hanno solo ambito globale e ambito locale (con subscope), ciascun oscilloscopio agisce come un ambito che racchiude (sebbene non immediatamente visibile) in tutti gli ambiti che ha aperto. Quando viene restituita una procedura, il suo ambito viene distrutto.
Documentazione: globale , upvar
Stampa del valore di una variabile
Per stampare il valore di una variabile come,
set tempVar "This is a string."
L'argomento nell'istruzione puts è preceduto da un segno $ , che indica a Tcl di utilizzare il valore della variabile.
% set tempVar "This is a string."
This is a string.
% puts $tempVar
This is a string.
Invocare set con un argomento
set può anche essere invocato con un solo argomento. Quando viene chiamato con un solo argomento, restituisce il contenuto di quell'argomento.
% set x 235
235
% set x
235
Eliminazione di variabili / s
Il comando unset è usato per rimuovere una o più variabili.
unset ?-nocomplain? ?--? ?name name name name?
- Ogni nome è un nome di variabile specificato in uno dei modi accettabili per il comando
set. - Se un nome fa riferimento a un elemento di un array, quell'elemento viene rimosso senza influire sul resto dell'array.
- Se un nome consiste in un nome di matrice senza indice tra parentesi, allora l'intero array viene cancellato.
- Se viene visualizzato -nocomplain come primo argomento, tutti gli errori possibili vengono eliminati dall'output del comando.
- L'opzione - indica la fine delle opzioni e dovrebbe essere utilizzata se si desidera rimuovere una variabile con lo stesso nome di una qualsiasi delle opzioni.
% set x 235
235
% set x
235
% unset x
% set x
can't read "x": no such variable
Variabili dello spazio dei nomi
Il comando variable garantisce che venga creata una determinata variabile dello spazio dei nomi. Fino a quando non viene assegnato un valore, il valore della variabile non è definito:
namespace eval mynamespace {
variable alpha
set alpha 0
}
È possibile accedere alla variabile dall'esterno dello spazio dei nomi (da qualsiasi luogo, in effetti) allegando il nome dello spazio dei nomi ad esso:
set ::mynamespace::alpha
L'accesso può essere semplificato all'interno di una procedura utilizzando nuovamente il comando variable :
proc ::mynamespace::myproc {} {
variable alpha
set alpha
}
Questo crea un alias locale per la variabile namespace.
Per una procedura definita in un altro spazio dei nomi, il nome della variabile deve contenere lo spazio dei nomi nell'invocazione della variable :
proc myproc {} {
variable ::mynamespace::alpha
set alpha
}