无法在 TCL 无效命令名称中调用 proc
unable to call proc in TCL Invalid command name
我可能遗漏了一些明显的东西,但也许你可以帮助我。
我有一个 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。找到可能的原因:
当我将 puts 调用放在 proc 下方时它起作用了 - 那么它不会先加载整个脚本吗?如果是这样的话似乎很奇怪,但也许就是这样。
您是正确的,在任何执行之前都没有加载整个脚本。 TCL 脚本一次解释一个命令,然后只有在完成后才会移动到下一个命令。没有预先编译来检查您可能在下面引用的程序。
在您的例子中,它首先尝试解释 puts
命令,这涉及调用 encodeSDR
。由于那还没有在内存中定义,解释器不知道你想做什么。
需要注意的一件事是,如果您自己定义过程(比如在 testing/debug 期间),然后以类似于示例的方式将其添加到脚本中。它会正常工作,直到您关闭会话,并且 TCL 的内存被释放。然而,下次您加载脚本时,它将失败,因为从未为该会话加载该过程。
我可能遗漏了一些明显的东西,但也许你可以帮助我。
我有一个 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。找到可能的原因:
当我将 puts 调用放在 proc 下方时它起作用了 - 那么它不会先加载整个脚本吗?如果是这样的话似乎很奇怪,但也许就是这样。
您是正确的,在任何执行之前都没有加载整个脚本。 TCL 脚本一次解释一个命令,然后只有在完成后才会移动到下一个命令。没有预先编译来检查您可能在下面引用的程序。
在您的例子中,它首先尝试解释 puts
命令,这涉及调用 encodeSDR
。由于那还没有在内存中定义,解释器不知道你想做什么。
需要注意的一件事是,如果您自己定义过程(比如在 testing/debug 期间),然后以类似于示例的方式将其添加到脚本中。它会正常工作,直到您关闭会话,并且 TCL 的内存被释放。然而,下次您加载脚本时,它将失败,因为从未为该会话加载该过程。