使用tcl interp别名重命名tcl内置命令

时间:2013-09-27 19:50:08

标签: hide tcl alias interpreter slave

如何在从属解释器中重命名现有的tcl命令?

换句话说

interp create test
test alias __proc proc

test eval {
  __proc hello {} {
    puts "hiya"
  }
  hello
}

遗憾的是,这不起作用。但是,如果我隐藏并以不同的名称公开。但是,我想使用命令proc__proc - 所以我更喜欢使用别名,或者任何其他方式......

2 个答案:

答案 0 :(得分:0)

Tcl解释器上的alias命令允许您在解释器中创建一个命令,使命令在不同的解释器中运行。这不是你想要的。

我认为以下是您想要的:

interp create test

test eval {
  rename proc __proc

  __proc hello {} {
        puts "hiya"
  }

  hello
}

然后,您可以将解释器的创建与proc命令的重命名结合起来,如下所示:

proc myinterp {interpName newProcName} {
   interp create $interpName
   $interpName eval "rename proc $newProcName"
}

myinterp test func

test eval { func greet {} { puts "hello" } }
test eval ( greet }

答案 1 :(得分:0)

你可以做任何一次

interp alias test __proc test proc

在主要的interp或

interp alias {} __proc {} proc

在奴隶中,所以以下两个程序都有效:

interp create test
interp alias test __proc test proc

test eval {
  __proc hello {} {
    puts "hiya"
  }
  hello
}

interp create test

test eval {
interp alias {} __proc {} proc
  __proc hello {} {
    puts "hiya"
  }
  hello
}

test alias __proc procinterp alias test __proc {} proc相同,这意味着从属设备中的__proc将在主设备中调用proc