2011-04-18 4 views
0

Donc, fondamentalement, dans mon script tcl, je génère une ligne de code tcl que je dois exécuter (c'est-à-dire que je trouve cette instruction pendant l'exécution). Une fois que j'ai l'instruction tcl disons par exemple "hello world $ test_var". Comment l'exécuter en utilisant tcl? Est-ce que j'utilise la commande eval ou quoi?Comment utiliser l'instruction eval dans tcl

Répondre

1

Je crains que vous n'avez pas d'autre choix raisonnable que d'utiliser la commande eval, par exemple:

set variable {puts "hello world $test_var"} 
eval $variable 
+0

Pourquoi avoir peur? Que crains-tu? –

+0

Dans cet exemple, il n'y a rien à craindre. Mais j'ai déjà eu des cas où il était assez difficile de faire face à 'eval' sans faire quelque chose de mal. Malheureusement, je ne me souviens pas du problème exact pour le moment. Cela avait quelque chose à voir avec des citations correctes et, pour autant que je m'en souvienne, c'était même un 'eval' imbriqué (mais à la fin cela a fonctionné correctement). – bmk

4

La commande eval est un moyen raisonnable de le faire, mais vous voudrez peut-être envisager d'utiliser au lieu catch, puisque ce piégera les problèmes éventuels lors de l'évaluation du code généré, par exemple comme ceci:

# Generate the code somehow 
set variable {puts "hello word $test_var"} 

# Execute and trap problems 
if {[catch $variable resultMsg]} { 
    # An error (or other exception) happened 
    puts stderr "BOOM, Error! $resultMsg" 
} 
2

au lieu d'utiliser [eval] qui fonctionne parfaitement bien, dans les versions les plus récentes de Tcl, vous pouvez utiliser e e {*} syntaxe. Par exemple:

set cmd "puts" 
lappend cmd "abcd ef" 
{*}$cmd 

Notez que c'est une bonne habitude d'utiliser la liste des commandes pour construire votre commande afin que vous ne serez rencontrez des problèmes citant.