2011-04-18 194 views
0

因此,基本上在我的tcl腳本中,我生成了一行必須執行的tcl代碼(即,我在運行時提出了該指令)。一旦我有了tcl指令,例如放入「hello world $ test_var」。我如何使用tcl執行此操作?如何在tcl中使用eval語句

我使用eval命令還是什麼?

回答

1

只怕你沒有其他合理的選擇,而不是使用eval命令,如:

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

爲什麼害怕?什麼是恐懼? – 2011-04-18 09:48:30

+0

在這個例子中,沒有什麼可怕的。但是我已經有了一些情況,在沒有做錯任何事情的情況下處理「eval」是非常困難的。不幸的是,我現在不記得確切的問題。這與正確的引用有關,並且據我所知,它甚至是一個嵌套的'eval'(但最終它的工作是正確的)。 – bmk 2011-04-18 10:05:00

4

eval命令是這樣做的合理的方式,但你可能要考慮使用catch代替,因爲這將陷阱生成的代碼的評估過程中發現的問題,比如像這樣:

# 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

而不是使用[EVAL],它工作得很好,Tcl中可以使用日的較新版本的e {*}語法。 例如:

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

注意它的使用列表中的好習慣命令來建立你的命令,這樣你不會遇到引用問題。