Tcl 错误:can';t重命名为";tmp“读取”命令:命令已存在

Tcl 错误:can';t重命名为";tmp“读取”命令:命令已存在,tcl,Tcl,假设您重命名了该命令,然后再次尝试重命名该命令,它将显示此错误消息 Error: can't rename to "tmp_read_command": command already exists 您如何第一次而不是第二次重命名它。我的意思是,我们可以设置一个检查条件来确定命令是否存在 详情: 两个文件: 包括.tcl proc snps_read_command { args } { echo "Hi, I am there" eval tmp_read_command } pro

假设您重命名了该命令,然后再次尝试重命名该命令,它将显示此错误消息

Error: can't rename to "tmp_read_command": command already exists
您如何第一次而不是第二次重命名它。我的意思是,我们可以设置一个检查条件来确定命令是否存在

详情:

两个文件:

包括.tcl

proc snps_read_command { args } {
  echo "Hi, I am there"
  eval tmp_read_command
}
proc procedure_a { args } {
  rename -force read_command tmp_read_command
  rename -force snps_read_comamnd read_command
}
source ./include.tcl
procedure_a
source ./include.tcl
procedure_a

read_command
read_command
测试.tcl

proc snps_read_command { args } {
  echo "Hi, I am there"
  eval tmp_read_command
}
proc procedure_a { args } {
  rename -force read_command tmp_read_command
  rename -force snps_read_comamnd read_command
}
source ./include.tcl
procedure_a
source ./include.tcl
procedure_a

read_command
read_command
执行上面的TCL脚本会显示以下错误消息:

Error: can't rename to "tmp_command": command already exists
这是因为我调用了两次过程a。第一次,它重新命名,第二次,当它试图重新命名时,它将重新命名。我明白

问题是:

我应该写些什么来避免第二次重命名?我尝试了info命令tmp_read_命令,但没有成功

我们是否可以设置检查条件来确定命令是否存在

检查最简单的方法之一是使用合适的模式查看
info命令返回的列表长度。这听起来比普通命令更复杂:

if {[llength [info commands tmp_read_command]]} {
    puts "The command tmp_read_command already exists"
}

对于名称中不包含glob元字符的命令(绝大多数命令!),这在字节码级别上是一个非常有效的检查。

哦,是的。我没有在代码中使用llength。谢谢