Suche…
Syntax
- setze varName ? Wert?
- nicht gesetzt -nocomplain ? ? -? ? varName varName varName ?
- setzt $ varName
- setzt [set varName ]
- Variable varName
- globaler varName ? varName varName ?
Bemerkungen
Variablen Werte zuweisen
Der set wird verwendet , um Werte in Tcl zuzuweisen. Wenn es mit zwei Argumenten auf folgende Weise aufgerufen wird,
% set tempVar "This is a string."
This is a string.
es legt das zweite Argument ("Dies ist eine Zeichenfolge.") in dem Speicherbereich ab, auf den das erste Argument (tempVar) verweist. set immer den Inhalt der im ersten Argument genannten Variablen zurück. Im obigen Beispiel würde set "Dies ist eine Zeichenfolge" zurückgeben. ohne die Anführungszeichen.
- Wenn value angegeben ist, wird der Inhalt der Variablen varName gleich value gesetzt .
- Wenn varName nur aus alphanumerischen Zeichen und keine Klammern besteht, handelt es sich um eine skalare Variable.
- Wenn varName das Format varName (Index) hat , ist es Mitglied eines assoziativen Arrays.
Beachten Sie, dass der Name der Variablen nicht auf das lateinische Alphabet beschränkt ist. Er kann aus einer beliebigen Kombination von Unicode-Zeichen (z. B. Armenisch) bestehen:
% set տուն house
house
% puts ${տուն}
house
Scoping
set alpha 1
proc myproc {} {
puts $alpha
}
myproc
Dieser Code funktioniert nicht, da die beiden Alphas unterschiedliche Gültigkeitsbereiche haben.
Der Befehlssatz set alpha 1 erstellt eine Variable im globalen Gültigkeitsbereich (wodurch sie zu einer globalen Variablen wird).
Der Befehl puts $alpha wird in einem Bereich ausgeführt, der erstellt wird, wenn der Befehl myproc ausgeführt wird.
Die zwei Bereiche sind unterschiedlich. Das bedeutet, wenn puts $alpha versucht, den Namen alpha , wird keine solche Variable gefunden.
Das können wir jedoch beheben:
proc myproc {} {
global alpha beta
puts $alpha
}
In diesem Fall sind zwei globale Variablen, alpha und beta , im Gültigkeitsbereich der Prozedur mit Alias-Variablen (mit demselben Namen) verknüpft. Beim Lesen aus den Aliasvariablen wird der Wert in den globalen Variablen abgerufen, und durch das Schreiben in diese werden die Werte in den Globalen geändert.
Im Allgemeinen erstellt der Befehl upvar Aliase für Variablen aus einem der vorherigen Bereiche. Es kann mit dem globalen Gültigkeitsbereich ( #0 ) verwendet werden:
proc myproc {} {
upvar #0 alpha alpha beta b
puts $alpha
}
Die Aliase können denselben Namen wie die mit ( alpha ) verknüpfte Variable oder einen anderen Namen ( beta / b ) haben.
Wenn wir myproc aus dem globalen Gültigkeitsbereich aufrufen, myproc diese Variante auch:
proc myproc {} {
upvar 1 alpha alpha beta b
puts $alpha
}
Die Bereichsnummer 1 bedeutet "der vorherige Bereich" oder "der Bereich des Anrufers".
Wenn Sie nicht wirklich wissen, was Sie tun, sind #0 , 0 und 1 die einzigen Bereiche, in denen upvar sinnvoll ist. ( upvar 0 erstellt einen lokalen Alias für eine lokale Variable, nicht streng eine Bereichseingabe.)
Einige andere Sprachen definieren den Gültigkeitsbereich durch geschweifte Klammern und lassen den Code in jedem Gültigkeitsbereich alle Namen in den umgebenden Gültigkeitsbereichen anzeigen. In Tcl wird beim Aufruf einer Prozedur ein einzelner Bereich erstellt, und nur die eigenen Namen sind sichtbar. Wenn eine Prozedur eine andere Prozedur aufruft, wird ihr Bereich über den vorherigen Bereich gestapelt und so weiter. Dies bedeutet, dass im Gegensatz zu Sprachen im C-Stil, die nur über einen globalen Bereich und einen lokalen Bereich (mit Teilbereichen) verfügen, jeder Bereich als einschließender (jedoch nicht sofort sichtbarer) Bereich für jeden geöffneten Bereich fungiert. Wenn eine Prozedur zurückkehrt, wird ihr Gültigkeitsbereich zerstört.
Den Wert einer Variablen drucken
Um den Wert einer Variablen zu drucken, z.
set tempVar "This is a string."
Dem Argument in der put-Anweisung steht ein $ -Zeichen voran, das Tcl anweist, den Wert der Variablen zu verwenden.
% set tempVar "This is a string."
This is a string.
% puts $tempVar
This is a string.
Set mit einem Argument aufrufen
set kann auch mit nur einem Argument aufgerufen werden. Bei Aufruf mit nur einem Argument wird der Inhalt dieses Arguments zurückgegeben.
% set x 235
235
% set x
235
Variable (n) löschen
Der Befehl unset wird verwendet, um eine oder mehrere Variablen zu entfernen.
unset ?-nocomplain? ?--? ?name name name name?
- Jeder Name ist ein Variablenname, der auf eine der für den Befehl
setakzeptablen Arten angegeben wird. - Wenn sich ein Name auf ein Element eines Arrays bezieht, wird dieses Element entfernt, ohne den Rest des Arrays zu beeinflussen.
- Wenn ein Name aus einem Arraynamen ohne Index in Klammern besteht, wird das gesamte Array gelöscht.
- Wenn -nocomplain als erstes Argument angegeben ist, werden alle möglichen Fehler in der Befehlsausgabe unterdrückt.
- Die Option - zeigt das Ende der Optionen an und sollte verwendet werden, wenn Sie eine Variable mit demselben Namen wie eine der Optionen entfernen möchten.
% set x 235
235
% set x
235
% unset x
% set x
can't read "x": no such variable
Namensraumvariablen
Der variable Befehl stellt sicher, dass eine bestimmte Namespace-Variable erstellt wird. Bis ein Wert zugewiesen wird, ist der Wert der Variablen undefiniert:
namespace eval mynamespace {
variable alpha
set alpha 0
}
Auf die Variable kann von außerhalb des Namespaces zugegriffen werden (von praktisch überall), indem der Name des Namespaces daran angehängt wird:
set ::mynamespace::alpha
Der Zugriff kann innerhalb einer Prozedur durch erneutes Verwenden des variable vereinfacht werden:
proc ::mynamespace::myproc {} {
variable alpha
set alpha
}
Dadurch wird ein lokaler Alias für die Namespace-Variable erstellt.
Für eine in einem anderen Namespace definierte Prozedur muss der Variablenname den Namespace beim Aufruf der variable :
proc myproc {} {
variable ::mynamespace::alpha
set alpha
}