什么是Tcl中源代码的功能?

时间:2017-08-28 17:45:07

标签: tcl

我有一系列Tcl脚本正在翻译中执行(Cadence Innovus)。我想要一种分组命令并通过一次调用执行它们的方法。从功能上讲,我可以通过在一个单独的文件中编写每组命令并调用source <group_file_name>来实现这一目的。但是,定义这么多文件是不方便的。

我试过这样做:

proc {} {
    commands...
}

这并没有给我我需要的功能。我相信它在较低的命名空间中执行命令,并且不会保留设置的变量。

有没有办法获得此功能(具有可调用函数的单个文件),但是在同一名称空间中执行?

1 个答案:

答案 0 :(得分:1)

嗯,您始终可以在该过程中使用uplevelnamespace eval来更改当前的命名空间。如果您使用uplevel,则可以执行此操作:

proc foo {} {
    uplevel 1 {
        TheFirstCommand
        TheSecondCommand
        TheThirdCommand
    }
}

使用namespace eval,您可以改为执行此操作:

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几乎是替代品。

相关问题