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