我可能错过了一些明显的东西,但也许你可以帮助我。
我有一个tcl脚本。这是完整的:
puts [encodeSDR 25]
proc encodeSDR {input} {
set sdr "test"
return $sdr
}
当我运行此脚本时出现错误:
c:\temp>tclsh testenviro.tcl
invalid command name "encodeSDR"
while executing
"encodeSDR"
invoke from within
"puts [encodeSDR 25]"
(file "testenviro.tcl" line 1)
我错过了什么?似乎这应该完美。
PS。找到可能的原因:
当我把put调用放在proc下面时它工作了 - 所以它不会先加载整个脚本吗?如果是这样的话似乎很奇怪,但也许就是这样。
答案 0 :(得分:3)
您是正确的,因为在执行任何执行之前未加载整个脚本。 TCL脚本一次解释一个命令,然后只有在完成后才会移动到下一个命令。事先没有编译来检查您可能在下面引用的程序。
在您的情况下,它首先尝试解释puts
命令,其中涉及调用encodeSDR
。由于尚未在记忆中定义,解释器不知道你想要做什么。
要注意的一件事是,如果您自己定义过程(比如在测试/调试期间),然后以类似于您的示例的方式将其添加到脚本中。它会正常工作,直到你关闭会话,并且TCL的内存被释放。但是,下次加载脚本时,它将失败,因为从未为该会话加载过程。