Jas*_*ick 1 interpreter procedure tcl externals
因此,我对TCL编程的方式非常新,缺乏经验.我写了一个脚本,调用别人写的proc,首先删除输出文件.然后我做了一些我写的额外逻辑.
我将逻辑移动到第二个过程中,并立即将其中的一堆(即rm命令)打破.
据我所知,中央执行中的第一个程序(proc定义后面的文本)在没有"exec"命令的情况下正常执行.但是,如果你在proc中移动它,它现在需要一个"exec"命令.
任何人都可以向我解释为什么TCL这样做?
例如
proc helloworld {} {
puts "hi"
}
#works
rm my_file
helloworld
Run Code Online (Sandbox Code Playgroud)
..
proc helloworld {} {
#doesn't work
rm my_file
puts "hi"
}
helloworld
Run Code Online (Sandbox Code Playgroud)
..
proc helloworld {} {
#works
eval rm my_file
puts "hi"
}
helloworld
Run Code Online (Sandbox Code Playgroud)
..
proc helloworld {} {
#works
file delete my_file
puts "hi"
}
helloworld
Run Code Online (Sandbox Code Playgroud)
*请注意,这种奇怪的行为可能是特定于我将脚本提供给vmd的程序,后者具有自己内置的TCL行为.也许在您的回复中,您可以指出这是否也是其他口译员的标准?
一个互动 tclsh的会议将尝试exec未知的命令(如rm).您不能指望在非交互式脚本执行中的这种行为,或者如您所发现的那样,在procs中.
我看不出这是在tclsh手册页中记录的,但是未知的手册页确实如此.另请参阅Tcl wiki上的tclsh页面.在交互式tclsh会话中,您可以unknown通过键入来查看:
info body unknown
Run Code Online (Sandbox Code Playgroud)
[更新]
引自"Tcl和Tk的实用编程":
该
unknown命令提供了一些其他便利.这些仅在您直接键入命令时使用.一旦执行进入过程或者未以交互方式使用Tcl shell,它们将被禁用.便利功能是程序的自动执行,命令历史记录和命令缩写.如果无法从脚本库加载命令实现,则按顺序尝试这些选项.