首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在tcl运行源代码时,我们可以跳过一个特定的命令吗?

在tcl运行源代码时,我们可以跳过一个特定的命令吗?
EN

Stack Overflow用户
提问于 2022-01-20 07:33:29
回答 2查看 76关注 0票数 1

例如:get_abc,生成集合的get_xyz命令,set_pqr接收集合是自定义命令,下面是tcl文件

代码语言:javascript
复制
#Tcl file start
get_abc
get_xyz
set_pqr -object [get_abc]
#Tcl file end

现在的要求是,我们需要跳过set_pqr命令,并且这个tcl文件很大并且只读取,我们不能更改它。现在,我们在set_pqr命令回调中添加了这种处理,以跳过处理,但是仍然会对同一行的get_abc命令进行处理,这无论如何都是要丢弃的,在集合转到set_pqr时不需要。另外,我们不能跳过软件中的get_abc,因为它是有效的,可以在其他地方使用。

tcl是否提供跳过set_pqr全行的功能?

EN

回答 2

Stack Overflow用户

发布于 2022-01-20 10:01:48

让Tcl做您想做的事情的唯一方法是不使用标准source加载命令。让我们来编写我们自己的版本:

代码语言:javascript
复制
proc skippingSource {filename} {
    set f [open $filename]
    set code [read $f]
    close $f
    # Comment out the offending lines; this is a cheap hack BTW
    set code [regsub -all -line {^set_pqr } $code "#set_pqr "]
    # Override [info script] until this procedure returns
    info script $filename
    uplevel 1 $code
}

现在我们只需要使用skippingSource而不是source。当然,我们可以直接调用它,这是最简单的方法,或者我们可以代替source

代码语言:javascript
复制
# Keep the original in case we want to put it back
rename source originalSource
rename skippingSource source
票数 0
EN

Stack Overflow用户

发布于 2022-01-20 18:31:41

您将set_pqr重新定义为一个什么都不做的proc:

代码语言:javascript
复制
# Back up original set_pqr
rename set_pqr set_pqr_original

# Make new proc that does nothing
proc set_pqr {args} {}

现在您可以对文件进行source,并且每个seq_pqr命令将什么都不做(并接受任意数量的参数)。

当您再次需要返回原始命令时:

代码语言:javascript
复制
rename set_pqr_original set_pqr

这整件事也可以一蹴而就:

代码语言:javascript
复制
proc source_with_skip {filename "skip_commands {}"} {
    foreach command $skip_commands {
        rename $command ${command}_original
    }

    source $filename

    foreach command $skip_commands {
        rename ${command}_original $command
    }
}

% source my_file.tcl set_pqr

请注意,如果proc位于与当前命名空间不同的名称空间中,上述内容可能不够。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70782252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档