Sök…
Syntax
- ställa in varName ? -värde ?
- avstängd? -nocomplain ? ? -? ? varName varName varName ?
- sätter $ varName
- sätter [set varName ]
- variabel varName
- global varName ? varName varName ?
Anmärkningar
Tilldela värden till variabler
Kommandot set används för att tilldela värden i Tcl. När det kallas med två argument på följande sätt,
% set tempVar "This is a string."
This is a string.
det placerar det andra argumentet ("Detta är en sträng.") i minnesutrymmet som det första argumentet (tempVar) refererar till. set alltid innehållet i den variabel som heter i det första argumentet. I exemplet ovan skulle set returnera "Detta är en sträng." utan citaten.
- Om värde anges ställs innehållet i variabeln varName lika med värdet .
- Om varName endast består av alfanumeriska tecken och inga parenteser är det en skalärvariabel.
- Om varName har formen varName (index) är det medlem i en associerande matris.
Observera att variabelns namn inte är begränsat till det latinska alfabetet, det kan bestå av en kombination av unicode-tecken (t.ex. armeniska):
% set տուն house
house
% puts ${տուն}
house
avgränsning
set alpha 1
proc myproc {} {
puts $alpha
}
myproc
Den här koden fungerar inte eftersom de två alfasen finns i olika tillämpningsområden.
Kommandoset set alpha 1 skapar en variabel i det globala omfånget (vilket gör det till en global variabel).
Kommandot puts $alpha körs i ett omfång som skapas när kommandot myproc körs.
De två räckvidden är distinkta. Det betyder att när puts $alpha försöker slå upp namnet alpha , så hittar det inte någon sådan variabel.
Vi kan dock fixa det:
proc myproc {} {
global alpha beta
puts $alpha
}
I det här fallet är två globala variabler, alpha och beta , kopplade till aliasvariabler (med samma namn) i procedurens omfattning. Läsning från aliasvariablerna hämtar värdet i de globala variablerna och genom att skriva till dem ändras värdena i globalerna.
Mer generellt skapar upvar kommandot alias till variabler från något av de tidigare områdena. Det kan användas med den globala räckvidden ( #0 ):
proc myproc {} {
upvar #0 alpha alpha beta b
puts $alpha
}
Aliasen kan ges samma namn som variabeln som är länkad till ( alpha ) eller ett annat namn ( beta / b ).
Om vi kallar myproc från den globala räckvidden myproc den här varianten också:
proc myproc {} {
upvar 1 alpha alpha beta b
puts $alpha
}
Räckvidden nummer 1 betyder "den tidigare räckvidden" eller "den som ringer upp".
Om du inte riktigt vet vad du gör är #0 , 0 och 1 de enda räckvidden som är vettigt att använda med upvar . ( upvar 0 skapar ett lokalt alias för en lokal variabel, inte strikt en scopingoperation.)
Vissa andra språk definierar omfattning med lockiga hängslen, och låt kod som körs i varje omfattning se alla namn i omgivande områden. I Tcl skapas en enda räckvidd när en procedur kallas, och bara dess egna namn är synliga. Om en procedur kallar en annan procedur, staplas dess omfattning ovanpå föregående omfattning osv. Detta betyder att i motsats till språk i C-stil som bara har global räckvidd och lokalt omfång (med underkopor), fungerar varje räckvidd som ett slutande (men inte omedelbart synligt) räckvidd för det räckvidd det har öppnat. När en procedur återgår förstörs dess omfattning.
Skriva ut värdet på en variabel
För att skriva ut värdet på en variabel som,
set tempVar "This is a string."
Argumentet i put-uttalandet föregås av ett $ -tecken som säger Tcl att använda värdet på variabeln.
% set tempVar "This is a string."
This is a string.
% puts $tempVar
This is a string.
Åkallande set med ett argument
set kan också åberopas med bara ett argument. När det kallas med bara ett argument returnerar det innehållet i det argumentet.
% set x 235
235
% set x
235
Radera variabel / s
unset kommandot används för att ta bort en eller flera variabler.
unset ?-nocomplain? ?--? ?name name name name?
- Varje namn är ett variabelnamn som anges på något av de sätt som är acceptabla för det
setkommandot. - Om ett namn hänvisar till ett element i en matris tas det elementet bort utan att det påverkar resten av matrisen.
- Om ett namn består av ett arraynamn utan index i parenteser raderas hela matrisen.
- Om -nocomplain anges som det första argumentet, undertrycks alla möjliga fel från kommandans utgång.
- Alternativet - anger slutet på alternativen och bör användas om du vill ta bort en variabel med samma namn som något av alternativen.
% set x 235
235
% set x
235
% unset x
% set x
can't read "x": no such variable
Namnrymdsvariabler
variable säkerställer att en given namnutrymdsvariabel skapas. Till dess att ett värde har tilldelats den definieras variabelns värde:
namespace eval mynamespace {
variable alpha
set alpha 0
}
Variabeln kan nås utanför namnområdet (var som helst, i själva verket) genom att bifoga namnet på namnområdet till det:
set ::mynamespace::alpha
Åtkomst kan förenklas inom en procedur genom att använda variable igen:
proc ::mynamespace::myproc {} {
variable alpha
set alpha
}
Detta skapar ett lokalt alias för namnområdet variabel.
För en procedur som definieras i ett annat namnutrymme måste variabelns namn innehålla namnområdet i åkallandet av variable :
proc myproc {} {
variable ::mynamespace::alpha
set alpha
}