这是一个相当简单的问题。为了澄清,我正在工作Tcl 8.5 我想完成变量插值:
>set p "puts me"
>puts $p
puts me
>{*}$p
me
所以这很好用。现在我想要一个字符串,表示将$ varname置于工作状态,然后失败。
>set k {puts $p}
>{*}$k
$p
我希望Tcl输出var p的值。使用“邪恶的评估”完成它:
> eval $k
puts me
如何使用eval获得eval行为? 感谢。
答案 0 :(得分:4)
需要替换列表中的每个项目,否则多字词值将成为参数。
set p {What is Awesome?}
set k {puts $p}
set len [llength $k]
# Must subst each item in the list in order
# to execute k properly.
for {set i 0} {$i < $len} {incr i} {
lset k $i [subst [lindex $k $i]]
}
{*}$k
输出:
./puts.tcl
What is Awesome?
使用subst进行变量替换。
puts.tcl
#!/usr/bin/tclsh
set p Awesome
set k {puts $p}
{*}[subst $k]
输出:
./puts.tcl
Awesome
答案 1 :(得分:0)
您可以使用proc和uplevel命令执行此操作。
set me {yo yo}
set p {puts $me}
proc doit {} "uplevel 1 {$p}"
doit