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

  • Parametrar inneslutna inom ? ...? som ? varName? representera valfria argument för ett Tcl-kommando.
  • Dokumentation: global , upvar

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.

Dokumentation: global , upvar

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 set kommandot.
  • 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
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow