0

这是一个代码示例:

set my_ref {$undefined_array(some_key)}
set my_val [subst $my_ref]

返回:

can't read "undefined_array(some_key)": no such variable
    while executing
"subst $my_ref"

根据http://wiki.tcl.tk/1501

看起来现在没有办法抓住这个

4

1 回答 1

3

subst尝试对您提供的文本执行替换时,它需要一个具有匹配名称的现有变量。如果不存在这样subst的变量,则抛出TCL LOOKUP VARNAME异常。

怎么抓?您可以像往常一样使用或来捕获异常失败 的异常。您提到的讨论是关于之前捕获异常的 AFAICT失败了,我认为这仍然是不可能的。substcatchtry subst

预计到达时间:

我的“区分尝试”评论的概念验证。这段代码有很多潜在的问题,但至少基本上展示了它是如何完成的。在示例中,处理程序的反应是创建一个变量,该变量具有自己的大写名称作为值。

# CAUTION: demonstration code, do not use without modification 
proc handler varName {
    upvar 1 $varName name 
    set name [string toupper $varName]
}
unset -nocomplain foo bar 
set baz xyz 
set str {$foo $bar $baz}
while true {
    try {
        subst $str 
    } on ok res {
        break 
    } trap {TCL LOOKUP VARNAME} {msg opts} {
        handler [lindex [dict get $opts -errorcode] end]
    }
}
set res
# -> FOO BAR xyz
于 2015-05-25T17:47:29.653 回答