有没有办法处理Tcl中不存在的proc?

Nit*_*esh 1 tcl

我是tcl的新手.有没有办法我们可以处理虽然在脚本中被调用但不存在的过程.我给你举个例子

假设这是我们的代码

package require 65ABC
package provide package1
65ABC::callingFunction param1 param2  (# this does not exist in 65ABC)

It will throw an error saying undefined command 65ABC::callingFunction
Run Code Online (Sandbox Code Playgroud)

如果我没记错,TCL但在其他语言中,在这些情况下有一个universal proc.这意味着在上面提到的场景中,当调用函数不存在时,它将进入一些通用过程,并执行在通用过程中编写的内容.假设我们可以打印一条消息,说"此proc不存在",或者我们可以做一些其他操作.

更新:添加catch命令不是一个选项.因为我大概有200个这样的过程.我想通过一个superproc来处理这些场景

Bry*_*ley 7

您正在寻找的是unknown和/或namespace unknown命令.这些命令记录在这里:

这是一个简单的例子unknown:

% rename unknown _unknown ;# save reference to the original
% proc unknown {args} {
    puts stderr "Hey, I don't know this command: $args"
    uplevel 1 [list _unknown {*}$args]
}
% hello world
Hey, I don't know this command: hello world
invalid command name "hello"
Run Code Online (Sandbox Code Playgroud)

当然,您可以在此过程中执行任何操作 - 您可以记录信息,动态创建缺失过程,引发错误等等.

  • 是的,您可以使用`namespace unknown`命令. (2认同)