使用格式时,Tcl中的命令名无效

时间:2011-06-02 13:34:12

标签: format tcl

我正在运行以下命令

set full_pin_name [format "%s %s" $top_cell $encoded_name]
puts "full_pin_name is $full_pin_name"

我收到以下错误:

full_pin_name is invalid command name "A" B

top_cell等于A且encoded_name等于B时 为什么会这样?

5 个答案:

答案 0 :(得分:3)

我怀疑问题出在你的$ top_cell变量上,该变量的值为无效的命令名“A”。要检查,请在格式行之前尝试以下行:

puts ">$top_cell<"

如果确实,$ top_cell值有问题,则可以追溯到最后的 set 命令。如果它解决了您的问题,请告诉我们,或者我们可以尝试其他方法。

答案 1 :(得分:3)

尝试在普通的Tcl shell中重复此操作,它可以正常工作。你的Tcl shell有些不同。

尝试

info body set

info body format

如果报告的内容不是set isn't a procedureformat isn't a procedure,那么您就有罪魁祸首。

答案 2 :(得分:1)

这个代码可能在命名空间中运行,其中定义了set命令吗? 为了证明:

% namespace eval foo {
    proc set args {
      puts hey!
    }
    proc whatever {top_cell encoded_name} {
      set full_pin_name [format "%s %s" $top_cell $encoded_name]
      puts "full_pin_name is $full_pin_name"
    }
  }
% ::foo::whatever A B
hey!
can't read "full_pin_name": no such variable
%

答案 3 :(得分:0)

据我所知,如果没有TCL解释器,它应该假设一个定义格式的普通解释器。所以看起来格式是重命名的,还是作为你正在使用的解释器中的命令不存在?

为了让你前进,你不需要格式来加入字符串

设置fill_pin_name“$ top_cell $ encoded_name”

应该如此

答案 4 :(得分:0)

也许你的代码看起来像这样:

set encoded_name B  
if { [catch {[A]} top_cell]} {
    set full_pin_name [format "%s %s" $top_cell $encoded_name]
    puts "full_pin_name is $full_pin_name"
}

结果是:

full_pin_name is invalid command name "A" B