我在c++中定义了一个tcl命令
Tcl_CreateObjCommand(interp, "myproc", myproc_func, nullptr, nullptr);
在tclsh
% rename myproc ""
这会完全删除 myproc 吗? 如果我定义了另一个myproc命令,是否可以将它与c++中定义的myproc关联起来?
当您删除命令(使用
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 的情况下使用了它?或者您想从可能删除该函数的代码中恢复吗?在这种情况下,您可能希望在(安全)从属解释器中运行不受信任的代码。