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

时间:2015-11-17 21:50:36

标签: tcl proc

我可能错过了一些明显的东西,但也许你可以帮助我。

我有一个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下面时它工作了 - 所以它不会先加载整个脚本吗?如果是这样的话似乎很奇怪,但也许就是这样。

1 个答案:

答案 0 :(得分:3)

您是正确的,因为在执行任何执行之前未加载整个脚本。 TCL脚本一次解释一个命令,然后只有在完成后才会移动到下一个命令。事先没有编译来检查您可能在下面引用的程序。

在您的情况下,它首先尝试解释puts命令,其中涉及调用encodeSDR。由于尚未在记忆中定义,解释器不知道你想要做什么。

要注意的一件事是,如果您自己定义过程(比如在测试/调试期间),然后以类似于您的示例的方式将其添加到脚本中。它会正常工作,直到你关闭会话,并且TCL的内存被释放。但是,下次加载脚本时,它将失败,因为从未为该会话加载过程。