2010-02-03 14 views
14

Estoy aprendiendo Tcl/Tk y estoy confundido sobre el uso de llaves en tcl.Comprender el uso de llaves

¡Para mí, parece ser usado tanto para indicar alcance como para declarar cadenas! ¿Es esto un error (o característica)?

¿Mi interpretación es correcta?

Respuesta

23

En pocas palabras,

  • llaves de Tcl actúan como comillas simples de sh - agrupar las palabras (y líneas) sin interpolación.
  • Las comillas dobles de Tcl actúan como las dobles comillas de sh, lo que permite la interpolación.

El hecho de que utilice llaves en una definición proc no es obligatorio. Es simplemente la forma más conveniente de pasar un script como argumento a proc sin interpolar.

Estos son equivalentes

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

y

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

Una vez que internalizar Tcl citando, se dará cuenta de cómo realmente flexible Tcl puede ser.

+2

En caso de que no estaba claro en la respuesta, la interpolación significa que la sustitución va a suceder. Si tiene una variable llamada myvar = "some string", {a $ myvar b} dará como resultado la cadena literal "a $ myvar b" ... mientras que "a $ myvar b" dará como resultado la cadena literal "a" alguna cadena b " – RHSeeger

+0

gracias, creo que lo entiendo ahora. tendré que usar tcl un poco más para entenderlo completamente, supongo. –

+1

Me gusta decir "solo necesitas usar llaves cuando necesites usar llaves", lo que significa que, a diferencia de la mayoría de los idiomas, las llaves son * solo * para las comillas. No hay nada en el lenguaje que requiera el uso de llaves. Están citando el mecanismo que puede elegir usar o no. Por supuesto, hay mejores prácticas que dicen cuándo es prudente usarlas ... –

-2

llaves juntas palabras grupales juntas para convertirse en argumentos. puedes encontrar muchas cosas tcl en internet buscando en Google. He aquí un intro

-2

hombre n Tcl

Esa es la página del manual para el intérprete Tcl! Léelo. ¡Leelo de nuevo! Incluso podría considerar ir a un lugar tranquilo y leerlo en voz alta. Esto le impedirá leer demasiado rápido. Cada letra cuenta.

Una vez que se encuentre en "citando el infierno", regrese a este documento y vuelva a leerlo.

Hay una versión en línea en: http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm

1

En respuesta al comentario de Toddius Zho, he visto un par de preguntas (y ellos mi auto tenía) por qué llaves se usan cuando el uso de variables, por ejemplo, $ {var}

En TCL una variable escalar estándar puede estar compuesta por cualquier carácter. Sin embargo, el operador de la sustitución de variables "$" supone que está utilizando caracteres alfanuméricos y guiones bajos (más separadores de espacio de nombre "::")

lo tanto, si se establece una variable con un carácter no alfanumérico, como "!", TCL error al intentar sustituir la variable.

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

El uso de llaves al operador sustitución no hace error:

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

Esto se debe a TCL no realiza la sustitución/interpolación sobre nada definido entre llaves.

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