2010-02-03 5 views
14

J'apprends Tcl/Tk et je suis confus sur l'utilisation des accolades dans tcl.Comprendre l'utilisation des accolades

Pour moi, il semble être utilisé à la fois pour indiquer la portée et déclarer des chaînes! Est-ce un bug (ou une fonctionnalité)?

Mon interprétation est-elle correcte? Les accolades regroupent les mots pour former des arguments.

Répondre

23

En un mot,

  • accolades de Tcl agissent comme des guillemets simples de sh - groupe de mots (et lignes) sans interpolation.
  • Les doubles guillemets de Tcl agissent comme les doubles guillemets de sh - permettant l'interpolation. Le fait que vous utilisiez des accolades dans une définition proc n'est pas obligatoire.

C'est juste le moyen le plus pratique de passer un script comme argument à proc sans interpolation.

Ce sont équivalents

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

et

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

Une fois que vous internaliser Tcl citer, vous vous rendrez compte combien réellement flexible Tcl peut être.

+2

Dans le cas où il n'a pas été clair dans la réponse, interpolation signifie que la substitution se produira. Si vous avez une variable nommée myvar = "some string", alors {a $ myvar b} donnera la chaîne littérale "a $ myvar b" ... tandis que "a $ myvar b" donnera la chaîne littérale "a une chaîne b " – RHSeeger

+0

merci, je pense que je comprends maintenant. devra utiliser tcl un peu plus pour comprendre pleinement je suppose. –

+1

J'aime dire "vous n'avez besoin que d'utiliser des accolades lorsque vous avez besoin d'accolades", ce qui signifie que - contrairement à la plupart des autres langues - les accolades sont * seulement * pour la citation. Il n'y a rien dans le langage qui vous oblige à utiliser des accolades. Ils citent un mécanisme que vous pouvez choisir d'utiliser ou non. Bien sûr, il y a des bonnes pratiques qui disent quand il est sage de les utiliser ... –

-2

Vous pouvez trouver beaucoup de choses sur internet en utilisant Google. Voici un intro

-2

homme n Tcl

C'est la page de manuel pour l'interpréteur Tcl! Lis le. Lisez-le à nouveau! Vous pourriez même envisager d'aller dans un endroit calme et le lire à haute voix. Cela vous empêchera de lire trop vite. Chaque lettre compte.

Une fois que vous vous trouvez dans "citant l'enfer", revenez à ce document et relisez-le.

Il existe une version en ligne à l'adresse: http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm

1

En réponse au commentaire de Toddius Zho, je l'ai vu quelques questions (et les avait moi-même) pourquoi les accolades sont utilisées lors de l'utilisation de variables par exemple $ {var}

Dans TCL, une variable scalaire standard peut être composée de n'importe quel caractère. Cependant, l'opérateur de substitution variable « $ » suppose que vous utilisez des caractères alphanumériques et caractères de soulignement (plus séparateurs d'espace de noms « :: »)

Donc, si une variable est définie par un caractère non alphanumérique, comme « ! », TCL Erreur lors de la tentative de substitution de la variable.

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

utilisant des accolades l'opérateur de substitution ne pas d'erreur:

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

En effet, TCL ne fonctionne pas substitution/interpolation sur quoi que ce soit défini entre accolades.

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