Buscar..
Sintaxis
- establecer varName ? valor?
- unset? -nocomplain ? - - ? varName varName varName ?
- pone $ varName
- pone [set varName ]
- variable varName
- varName global? varName varName ?
Observaciones
Asignando valores a las variables.
El set comandos se utiliza para asignar valores en Tcl. Cuando se llama con dos argumentos de la siguiente manera,
% set tempVar "This is a string."
This is a string.
coloca el segundo argumento ("Esto es una cadena") en el espacio de memoria al que hace referencia el primer argumento (tempVar). set siempre devuelve el contenido de la variable nombrada en el primer argumento. En el ejemplo anterior, set devolvería "Esto es una cadena". sin las comillas.
- Si se especifica el valor , entonces el contenido de la variable varName se establece igual al valor .
- Si varName consta solo de caracteres alfanuméricos y no tiene paréntesis, es una variable escalar.
- Si varName tiene la forma varName (índice) , es un miembro de una matriz asociativa.
Tenga en cuenta que el nombre de la variable no está restringido al alfabeto latino, puede consistir en cualquier combinación de caracteres Unicode (por ejemplo, armenio):
% set տուն house
house
% puts ${տուն}
house
Alcance
set alpha 1
proc myproc {} {
puts $alpha
}
myproc
Este código no funciona porque los dos alfas están en diferentes ámbitos.
El set alpha 1 comandos set alpha 1 crea una variable en el ámbito global (que la convierte en una variable global).
El comando puts $alpha se ejecuta en un ámbito que se crea cuando se ejecuta el comando myproc .
Los dos ámbitos son distintos. Esto significa que cuando puts $alpha intenta buscar el nombre alpha , no encuentra ninguna de esas variables.
Podemos arreglar eso, sin embargo:
proc myproc {} {
global alpha beta
puts $alpha
}
En este caso, dos variables globales, alpha y beta , están vinculadas a variables de alias (con el mismo nombre) en el alcance del procedimiento. La lectura de las variables de alias recupera el valor en las variables globales y al escribirlas cambia los valores en las variables globales.
Más generalmente, el comando upvar crea alias a variables de cualquiera de los ámbitos anteriores. Se puede usar con el alcance global ( #0 ):
proc myproc {} {
upvar #0 alpha alpha beta b
puts $alpha
}
Los alias pueden recibir el mismo nombre que la variable que está vinculada a ( alpha ) u otro nombre ( beta / b ).
Si llamamos a myproc desde el ámbito global, esta variante también funciona:
proc myproc {} {
upvar 1 alpha alpha beta b
puts $alpha
}
El número de alcance 1 significa "el alcance anterior" o "el alcance de la persona que llama".
A menos que realmente sepa lo que está haciendo, #0 , 0 y 1 son los únicos ámbitos que tienen sentido utilizar con upvar . ( upvar 0 crea un alias local para una variable local, no es estrictamente una operación de alcance).
Algunos otros lenguajes definen el alcance mediante llaves y permiten que el código que se ejecuta en cada alcance vea todos los nombres en los ámbitos circundantes. En Tcl se crea un solo ámbito cuando se llama a un procedimiento, y solo sus propios nombres son visibles. Si un procedimiento llama a otro procedimiento, su alcance se apila sobre el alcance anterior, y así sucesivamente. Esto significa que, a diferencia de los lenguajes de estilo C que solo tienen un alcance global y un alcance local (con subtemas), cada alcance actúa como un ámbito cerrado (aunque no inmediatamente visible) para cualquier alcance que haya abierto. Cuando un procedimiento vuelve, su alcance se destruye.
Imprimiendo el valor de una variable
Para imprimir el valor de una variable tal como,
set tempVar "This is a string."
El argumento en la declaración de put está precedido por un signo $ , que le dice a Tcl que use el valor de la variable.
% set tempVar "This is a string."
This is a string.
% puts $tempVar
This is a string.
Invocando set con un argumento
set también se puede invocar con un solo argumento. Cuando se llama con un solo argumento, devuelve el contenido de ese argumento.
% set x 235
235
% set x
235
Borrando variable / s
El comando unset se usa para eliminar una o más variables.
unset ?-nocomplain? ?--? ?name name name name?
- Cada nombre es un nombre de variable especificado en cualquiera de las formas aceptables para el comando
set. - Si un nombre se refiere a un elemento de una matriz, ese elemento se elimina sin afectar el resto de la matriz.
- Si un nombre consta de un nombre de matriz sin índice entre paréntesis, se elimina toda la matriz.
- Si se da -nocomplain como primer argumento, todos los errores posibles se eliminan de la salida del comando.
- La opción - indica el final de las opciones, y debe usarse si desea eliminar una variable con el mismo nombre que cualquiera de las opciones.
% set x 235
235
% set x
235
% unset x
% set x
can't read "x": no such variable
Variables del espacio de nombres
El comando variable asegura que se crea una variable de espacio de nombres dada. Hasta que se le asigne un valor, el valor de la variable no está definido:
namespace eval mynamespace {
variable alpha
set alpha 0
}
Se puede acceder a la variable desde fuera del espacio de nombres (desde cualquier lugar, de hecho) adjuntando el nombre del espacio de nombres:
set ::mynamespace::alpha
El acceso se puede simplificar dentro de un procedimiento usando el comando variable nuevamente:
proc ::mynamespace::myproc {} {
variable alpha
set alpha
}
Esto crea un alias local para la variable de espacio de nombres.
Para un procedimiento definido en otro espacio de nombres, el nombre de la variable debe contener el espacio de nombres en la invocación de la variable :
proc myproc {} {
variable ::mynamespace::alpha
set alpha
}