Vi è mai capitato di inserire un euro in una macchinetta del caffè e ricevere un bicchiere vuoto? Una bella scocciatura e non serve prenderla a calci, lei rimarrà impassibile e si terrà pure il vostro euro!
Per fortuna che in Tcl queste cose non accadono: se vogliamo ottenere il risultato di un comando, non dobbiamo far altro che inserirlo all’interno di una coppia di parentesi quadre [...].
Possiamo assimilare questa tecnica del Tcl al funzionamento di una generica funzione la cui caratteristica fondamentale è proprio quella di restituire sempre un risultato.
puts "x = [set x [set y 6]]"
---
x = 6
Regola generale
L’interprete Tcl normalmente esegue dei passi predefiniti. Nel nostro caso:
- Valuta il comando più interno, ovvero
set y 6assegnando il valore6alla variabiley; - Sostituisce la parte racchiusa tra la coppia interna di parentesi quadre
[set y 6]con il valore restituito dal comandoset, ovvero il valore6; - Valuta il comando
setpiù esterno assegnando alla variabilexil valore6ottenuto con la sostituzione precedente; - Sostituisce la parte racchiusa tra la coppia esterna di parentesi quadre con il valore restituito dal comando
set, ovvero il valore6; - Valuta il comando
putsutilizzando come argomento il contenuto racchiuso all’interno della coppia di doppie virgolette alte.
Eccezioni alla regola
Caso 1
Se una coppia di parentesi quadre è preceduta dalla barra rovesciata o è all’interno di una coppia di parentesi graffe, l’interprete non esegue alcuna sostituzione.
set z "\[set x [set y 6]]"
puts "z = $z\n"
---
z = [set x 6]
set z "[set x {[set y 6]}]"
puts "z = $z\n"
---
z = [set y 6]
set z {[set x [set y 6]]}
puts "z = $z\n"
---
z = [set x [set y 6]]
Caso 2
Se inseriamo una coppia di parentesi graffe all’interno di una coppia di doppie virgolette alte, le parentesi graffe perdono la loro funzione e diventano dei semplici caratteri grafici e quindi eventuali parentesi quadre al loro interno tornano ad essere attive.
set z "{[set x [set y 6]]}"
puts "z = $z\n"
---
z = {6}
Nel prossimo articolo ripasseremo un po’ di matematica facendo la conoscenza del comando expr.
