tcl
Les variables
Recherche…
Syntaxe
- set varName ? value?
- non défini? -nocomplain ? ? -? ? varName varName varName ?
- met $ varName
- met [set varName ]
- variable varName
- varName global? varName varName ?
Remarques
Affectation de valeurs aux variables
Le set commandes est utilisé pour affecter des valeurs dans Tcl. Quand il est appelé avec deux arguments de la manière suivante,
% set tempVar "This is a string."
This is a string.
il place le deuxième argument ("Ceci est une chaîne.") dans l'espace mémoire référencé par le premier argument (tempVar). set retourne toujours le contenu de la variable nommée dans le premier argument. Dans l'exemple ci-dessus, set renvoie "Ceci est une chaîne". sans les citations.
- Si value est spécifié, le contenu de la variable varName est défini sur valeur .
- Si varName se compose uniquement de caractères alphanumériques et pas de parenthèses, il s'agit d'une variable scalaire.
- Si varName a la forme varName (index) , il est membre d'un tableau associatif.
Notez que le nom de la variable n'est pas limité à l'alphabet latin, il peut s'agir de n'importe quelle combinaison de caractères Unicode (par exemple l'arménien):
% set տուն house
house
% puts ${տուն}
house
La portée
set alpha 1
proc myproc {} {
puts $alpha
}
myproc
Ce code ne fonctionne pas car les deux alphas sont dans des portées différentes.
Le set alpha 1 commandes set alpha 1 crée une variable dans la portée globale (ce qui en fait une variable globale).
La commande puts $alpha est exécutée dans une étendue créée lors de l'exécution de la commande myproc .
Les deux portées sont distinctes. Cela signifie que lorsque puts $alpha tente de rechercher le nom alpha , il ne trouve aucune variable de ce type.
Nous pouvons corriger cela, cependant:
proc myproc {} {
global alpha beta
puts $alpha
}
Dans ce cas, deux variables globales, alpha et beta , sont liées aux variables alias (portant le même nom) dans la portée de la procédure. La lecture des variables d’alias récupère la valeur dans les variables globales et leur écriture modifie les valeurs des globales.
Plus généralement, la commande upvar crée des alias pour les variables à partir des portées précédentes. Il peut être utilisé avec la portée globale ( #0 ):
proc myproc {} {
upvar #0 alpha alpha beta b
puts $alpha
}
Les alias peuvent avoir le même nom que la variable liée à ( alpha ) ou un autre nom ( beta / b ).
Si nous appelons myproc depuis la portée globale, cette variante fonctionne également:
proc myproc {} {
upvar 1 alpha alpha beta b
puts $alpha
}
Le numéro de champ d'application 1 signifie "la portée précédente" ou "la portée de l'appelant".
A moins que vous ne sachiez vraiment ce que vous faites, les #0 , 0 et 1 sont les seules à utiliser avec upvar . ( upvar 0 crée un alias local pour une variable locale, pas strictement une opération de portée.)
Certains autres langages définissent l'étendue par des accolades et laissent le code s'exécuter dans chaque étendue pour voir tous les noms dans les étendues environnantes. Dans Tcl, une seule étendue est créée lors de l'appel d'une procédure et seuls ses propres noms sont visibles. Si une procédure appelle une autre procédure, son étendue est empilée sur l'étendue précédente, et ainsi de suite. Cela signifie que, contrairement aux langages de style C qui ont uniquement une portée globale et une étendue locale (avec des sous-étendues), chaque portée agit comme une portée englobante (mais pas immédiatement visible) pour toute étendue ouverte. Lorsqu'une procédure revient, son étendue est détruite.
Impression de la valeur d'une variable
Pour imprimer la valeur d'une variable telle que,
set tempVar "This is a string."
L'argument dans l'instruction put est précédé d'un signe $ , qui indique à Tcl d'utiliser la valeur de la variable.
% set tempVar "This is a string."
This is a string.
% puts $tempVar
This is a string.
Invoquer ensemble avec un argument
set peut également être invoqué avec un seul argument. Appelé avec un seul argument, il renvoie le contenu de cet argument.
% set x 235
235
% set x
235
Supprimer une variable / s
La commande unset est utilisée pour supprimer une ou plusieurs variables.
unset ?-nocomplain? ?--? ?name name name name?
- Chaque nom est un nom de variable spécifié de l'une des manières acceptables pour la commande
set. - Si un nom fait référence à un élément d'un tableau, cet élément est supprimé sans affecter le reste du tableau.
- Si un nom est constitué d'un nom de tableau sans index entre parenthèses, le tableau entier est supprimé.
- Si -nocomplain est donné comme premier argument, alors toutes les erreurs possibles sont supprimées de la sortie de la commande.
- L'option - indique la fin des options et doit être utilisée si vous souhaitez supprimer une variable portant le même nom que l'une des options.
% set x 235
235
% set x
235
% unset x
% set x
can't read "x": no such variable
Variables d'espace de noms
La commande variable garantit qu'une variable d'espace de nom donnée est créée. Tant qu'une valeur ne lui est pas attribuée, la valeur de la variable est indéfinie:
namespace eval mynamespace {
variable alpha
set alpha 0
}
La variable est accessible depuis l'extérieur de l'espace de noms (de n'importe où) en y attachant le nom de l'espace de nommage:
set ::mynamespace::alpha
L'accès peut être simplifié au sein d'une procédure en utilisant variable nouveau la commande variable :
proc ::mynamespace::myproc {} {
variable alpha
set alpha
}
Cela crée un alias local pour la variable d'espace de noms.
Pour une procédure définie dans un autre espace de noms, le nom de la variable doit contenir l'espace de noms dans l'invocation de la variable :
proc myproc {} {
variable ::mynamespace::alpha
set alpha
}