我们可以根据标志交换执行顺序(从上到下改为从下到上)?

时间:2013-01-29 14:21:02

标签: tcl

我有一个if循环循环,我在路由器中配置命令

    mode contains config or unconfig as values

if {[regexp -nocase {^config$} $mode]} {

set conf ""

} else {

 set conf no

}

 $router config "$conf primary command\n"

 $router config "$conf secondary command\n"

当mode设置为config everthing is fine时,首先配置primary命令,然后配置secondary命令“ 但是在取消配置时我希望先执行辅助命令 然后只有它允许我删除主命令...所以当$ mode更改时我能够交换执行顺序吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试让代码保留要执行的操作列表,因为用户列出它们而不是立即执行它们,只是实际对某些信号执行操作。然后交换执行顺序只是在反向处理列表的问题,这非常简单(lreverse可能有帮助)。

我个人并不倾向于这样做。通常的Tcl方式是立即按照指定的顺序执行操作;唯一值得注意的例外是Tk(推迟显示和布局“直到空闲”,即没有待处理的事件)和Expect在某些用途中(这是部分的;你可以同时expect多件事,但是它们按照指定的顺序进行检查。

答案 1 :(得分:0)

那样的东西?

if {$conf == "no"} {
    $router config "$conf primary command\n"
    $router config "$conf secondary command\n"
} else {
    $router config "$conf secondary command\n"
    $router config "$conf primary command\n"
}

答案 2 :(得分:0)

proc myConf {cmd} {
  global myConfs router

  $router config "$cmd\n"
  lappend myConfs $cmd
}

# configure
set myConfs {}
myConf "primary command"
myConf "secondary command"

# unconfigure
foreach cmd [lreverse $myConfs] {
  $router config "no $cmd\n"
}