我正在运行以下命令
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时
为什么会这样?
答案 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 procedure
或format 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