tcl: comment faire pour utiliser la valeur d'une variable pour créer une nouvelle variable
voici un exemple de ce que je suis en train de faire.
set t SNS
set ${t}_top [commands that return value]
Voulez obtenir les informations sont stockées dans ${t}_top
puts “${t}_top”
SNS_top (really want the data stored there?)
Pensais que c'était : ${{$t}_top} , peut être que c'était perl mais {} dans les {} ne fonctionne pas.
OriginalL'auteur Jeff C | 2009-10-23
Vous devez vous connecter pour publier un commentaire.
L'une des choses vraiment intéressantes à propos de Tcl est que vous pouvez créer des noms de variables dynamiquement, comme vous le faites dans la question que vous avez posté. Cependant, ce qui rend difficile d'écrire et rend votre code plus difficile que nécessaire de comprendre.
Au lieu d'essayer de comprendre comment faire l'équivalent de ${{$t}_top}, il est sans doute préférable d'éviter complètement le problème. Vous pouvez faire cela en utilisant un tableau associatif.
Par exemple, au lieu de cela:
Ce faire:
La plupart des gens conviennent que le dernier exemple est beaucoup plus lisible.
OriginalL'auteur Bryan Oakley
essayer
OriginalL'auteur Jackson
Chaque ligne de code Tcl est exécuté par le biais de la substitution de phase (dans les variables, les commandes, etc sont substitués) qu'une seule fois... en général. En tant que tel, quelque chose comme
de ne pas se retrouver avec var3 = 1, puisque la substitutor remplacer "$$var2" avec "la valeur de la variable nommée '$var2' (littéralement)" et de s'arrêter.
Ce que vous en avez besoin pour aller sur les choses d'une autre manière ou à un autre tour de force de substitution. L'autre façon est généralement à éviter d'avoir besoin d'un second tour de substitution (comme indiqué par Jackson):
Ici, $var2 est remplacé, lors de la substitution, par "var1"... puis sur [set var1] renvoie 1... puis var3 obtient mis à la valeur "1"... et vous êtes bon.
OriginalL'auteur RHSeeger
La syntaxe
fonctionne aussi bien, et évite d'utiliser l'ensemble de l'opération si une erreur de syntaxe ne doit pas écraser vos données.
::argc+[file delete -force /]+$
”.) La syntaxe standard de Jackson, la réponse est fort, et Bryan, la réponse est que vraiment doit être fait.Je suis d'accord, et je dirais que aucun méthode de création dynamique des noms de variables est mauvais style. J'ai essayé de corriger les OP syntaxe plus de leur style. Je suppose que sournois des exemples comme la vôtre ne serait jamais un problème, puisque
t
doit toujours être sous votre contrôle (je ne peux pas imaginer un cas où il serait judicieux de construire un nom de variable en fonction de l'utilisateur/entrée externe).OriginalL'auteur bta