如何删除 tclsh 中的命令

问题描述 投票:0回答:1

我在c++中定义了一个tcl命令

Tcl_CreateObjCommand(interp, "myproc", myproc_func, nullptr, nullptr);

在tclsh

% rename myproc ""

这会完全删除 myproc 吗? 如果我定义了另一个myproc命令,是否可以将它与c++中定义的myproc关联起来?

tcl tclsh
1个回答
0
投票

当您删除命令(使用

rename myproc ""
)时,您将丢失对该命令的所有引用。没有办法恢复命令,除非从头开始重新创建它。

如果你想暂时使myproc不可用,可以重命名为一些特殊的名称,然后重命名回来以恢复它:

rename myproc __myproc
# Do some other stuff that may not use myproc
rename __myproc myproc

当然,中间代码仍然可以调用__myproc。

另一种方法是隐藏命令:

interp hide {} myproc
# Do some other stuff that may not use myproc
interp expose {} myproc

这仍然不能完全阻止对该函数的访问,因为可以使用以下方式调用它:

interp invokehidden {} myproc

这完全取决于您为什么要这样做。您是否担心某些代码在不应该使用 myproc 的情况下使用了它?或者您想从可能删除该函数的代码中恢复吗?在这种情况下,您可能希望在(安全)从属解释器中运行不受信任的代码。

© www.soinside.com 2019 - 2024. All rights reserved.