我正在做eval文件的内容.该文件由我解析的标签组成.每行都有一个标签,我proc为每个标签定义了一个标签,以便eval成功.但是,有时用户添加新标签,然后eval命令失败,因为命令未知.
有没有办法防止Tcl在尝试eval未知命令时崩溃?
理想情况下,它应该允许我用我自己定义的行为替换 - 例如引用错误并继续使用eval.
编辑:
不幸的是,我只能使用Tcl 8.4.
我按照这里的建议尝试了以下操作:
proc handle_unknown_label {cmd args} { ... }
Run Code Online (Sandbox Code Playgroud)
然后:
rename unknown _old_system_unknown
rename handle_unknown_label unknown
catch {set ret [eval $x]} err
rename unknown handle_unknown_label
rename _old_system_unknown unknown
Run Code Online (Sandbox Code Playgroud)
但我仍然得到相同的行为eval,它打印出以下错误:
过程未知是一个受保护的过程并且不会被重命名
过程未知是一个受保护的过程并且不会被覆盖
过程未知是一个受保护的过程并且不会被重命名
过程未知是一个受保护的过程并且不会被覆盖
实现您自己的名为 的命令unknown,该命令将构成无法找到的命令的所有单词及其参数作为其参数:
proc unknown {cmdName args} {
puts "UNKNOWN COMMAND: $cmdName"
puts "CALLED WITH ARGUMENTS: $args"
}
Run Code Online (Sandbox Code Playgroud)
这就是您需要做的全部事情,尽管您可以通过使用namespace unknown.