无法在 TCL 中调用 proc 命令名称无效

Leg*_*ack 5 tcl proc

我可能在这里遗漏了一些明显的东西,但也许你可以帮助我。

我有一个 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 的内存被释放。但是,下次加载脚本时,它将失败,因为从未为该会话加载该过程。