1

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

换句话说

interp create test
test alias __proc proc

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

不幸的是,这不起作用。但是,如果我以其他有效的名称隐藏和公开。但是,我想同时使用这两个命令proc-__proc所以我更喜欢使用别名或任何其他方式......

4

2 回答 2

1

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 }
于 2013-09-27T20:14:45.753 回答
0

你可以做

interp alias test __proc test proc

在主插播或

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 proc和 一样interp alias test __proc {} proc,表示__proc在slave中会调用procmaster。

于 2013-09-27T21:23:36.563 回答