Tcl中的source的函数等价物是什么?
我有一系列的Tcl脚本正在解释器(Cadence Innovus)中执行。我想要一种将命令分组并通过单个调用执行它们的方法。从功能上讲,我可以通过将每组命令写入一个单独的文件并调用Tcl中的source的函数等价物是什么?,tcl,Tcl,我有一系列的Tcl脚本正在解释器(Cadence Innovus)中执行。我想要一种将命令分组并通过单个调用执行它们的方法。从功能上讲,我可以通过将每组命令写入一个单独的文件并调用source来实现这一点。但是,定义这么多文件很不方便 我已尝试通过以下方式实现这一点: proc {} { commands... } 但这并没有给我所需要的功能。我相信它在较低的名称空间中执行命令,并且设置的变量不会保留 有没有一种方法可以获取此功能(具有可调用函数的单个文件),但这些功能在同一命名空间中
source
来实现这一点。但是,定义这么多文件很不方便
我已尝试通过以下方式实现这一点:
proc {} {
commands...
}
但这并没有给我所需要的功能。我相信它在较低的名称空间中执行命令,并且设置的变量不会保留
有没有一种方法可以获取此功能(具有可调用函数的单个文件),但这些功能在同一命名空间中执行?好的,您可以在该过程中始终使用
uplevel
或namespace eval
来更改当前命名空间。如果使用uplevel
,您将执行以下操作:
proc foo {} {
uplevel 1 {
TheFirstCommand
TheSecondCommand
TheThirdCommand
}
}
proc foo {} {
namespace eval ::theTargetNamespace {
TheFirstCommand
TheSecondCommand
TheThirdCommand
}
}
使用namespace eval
,您可以执行以下操作:
proc foo {} {
uplevel 1 {
TheFirstCommand
TheSecondCommand
TheThirdCommand
}
}
proc foo {} {
namespace eval ::theTargetNamespace {
TheFirstCommand
TheSecondCommand
TheThirdCommand
}
}
如果您想将局部变量与范围更改器一起使用,事情会变得更复杂一些,但是无论您使用哪种机制,如何管理事情的原则都是相同的
proc foo {} {
set a [uplevel 1 { TheFirstCommand }]
set b [uplevel 1 { TheSecondCommand }]
# Dynamically-generate the script to run; it's trivial code generation
uplevel 1 [list TheThirdCommand $a $b]
}
切换到namespace eval
几乎是替代品