2010-02-03 25 views
14

Sto imparando Tcl/Tk e sono confuso sull'uso di parentesi graffe in tcl.Capire l'utilizzo delle parentesi graffe

Per me sembra essere usato sia per indicare lo scope che per dichiarare le stringhe! È un bug (o funzionalità)?

La mia interpretazione è corretta?

risposta

23

In poche parole,

  • bretelle di Tcl agire come singoli apici di SH - parole del gruppo (e linee) senza interpolazione.
  • Le doppie virgolette di Tcl si comportano come le virgolette doppie di sh, consentendo l'interpolazione.

Il fatto che si utilizzino le parentesi graffe in una definizione proc non è obbligatorio. È solo il modo più comodo per passare uno script come argomento per proc senza interpolazione.

Questi sono equivalenti

proc add3 {a b c} { 
    return [expr {$a + $b + $c}] 
} 

e

proc add3_weird [list a b c] "return \[expr {\[set a] + \[set b] + \[set c]}]" 

Una volta che interiorizzare Tcl citando, vi renderete conto di come veramente flessibile Tcl può essere.

+2

Nel caso non era chiaro nella risposta, interpolazione significa che la sostituzione avverrà. Se hai una variabile denominata myvar = "qualche stringa", allora {a $ myvar b} risulterà nella stringa letterale "a $ myvar b" ... mentre "a $ myvar b" risulterà nella stringa letterale "a qualche stringa b " – RHSeeger

+0

grazie, penso di averlo capito ora. dovrò usare tcl un po 'di più per capire a fondo credo. –

+1

Mi piace dire "basta usare le parentesi graffe quando è necessario utilizzare le parentesi graffe", il che significa che - a differenza della maggior parte delle lingue - le parentesi graffe sono * solo * per le citazioni. Non c'è niente nella lingua che mai richiede l'utilizzo di parentesi graffe. Stanno citando un meccanismo che puoi scegliere di usare o meno. Certo, ci sono buone pratiche che dicono quando è saggio usarle ... –

-2

parentesi graffe raggruppano insieme le parole per diventare argomenti. puoi trovare roba in abbondanza su internet su google. Ecco un intro

-2

uomo n Tcl

Questa è la pagina di manuale per l'interprete Tcl! Leggilo. Leggi di nuovo! Potresti anche considerare di andare in un posto tranquillo e leggerlo ad alta voce. Questo ti impedirà di leggere troppo velocemente. Conta ogni singola lettera

Una volta che ti trovi in ​​"quoting hell" torna a questo documento e rileggilo.

V'è una versione on-line all'indirizzo: http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm

1

In risposta al commento di Toddius Zho, ho visto un paio di domande (e la mia auto aveva) il motivo per cui le parentesi graffe vengono utilizzati quando si utilizza le variabili per esempio $ {var}

In TCL una variabile scalare standard può essere composta da qualsiasi carattere. Tuttavia l'operatore di sostituzione variabile "$" presuppone che si utilizzino caratteri alfanumerici e caratteri di sottolineatura (più separatori di spazio dei nomi "::")

Quindi se una variabile è impostata con un carattere non alfanumerico, ad esempio "!", TCL errore quando si tenta di sostituire la variabile.

% set myvar! 123 
123 
% puts $myvar! 
can't read "myvar": no such variable 

Uso parentesi graffe dell'operatore sostituzione non fa errore:

% set myvar! 123 
123 
%puts ${myvar!} 
123 

Questo perché TCL non esegue la sostituzione/interpolazione su nulla definito tra parentesi graffe.

http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm

Problemi correlati