Recherche…


Syntaxe

  • set varName ? value?
  • non défini? -nocomplain ? ? -? ? varName varName varName ?
  • met $ varName
  • met [set varName ]
  • variable varName
  • varName global? varName varName ?

Remarques

  • Paramètres inclus dans ? ...? tel que ? varName? représente des arguments optionnels pour une commande Tcl.
  • Documentation: global , upvar

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.

Documentation: global , upvar

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
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow