首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式Tcl: Tcl自动完成命令吗?

嵌入式Tcl: Tcl自动完成命令吗?
EN

Stack Overflow用户
提问于 2018-11-14 14:23:26
回答 1查看 310关注 0票数 1

我们在C/C++应用程序的中构建了一个Tcl ,如果找不到命令,我在代码中找到了调用Tcl_EvalObjv的位置。我不得不承认,这段代码相当陈旧,而且我们的开发人员中没有多少人知道这个模块中发生了什么。

看起来是这样的:

代码语言:javascript
复制
// ... there is some checking if command is registered etc., it fails and the code goes here:
std::vector<Tcl_Obj*> tclArgs = { NULL };
for (int i = 1; i < objc; ++i)
    tclArgs.push_back(objv[i]);
tclArgs.shrink_to_fit();
// ...
tclArgs[0] = ::Tcl_NewStringObj(ORIGINAL_UNKNOWN, ORIGINAL_UNKNOWN_SIZE);
Tcl_IncrRefCount(tclArgs[0]);
::Tcl_ExposeCommand(pInterp, ORIGINAL_UNKNOWN, ORIGINAL_UNKNOWN);
result = ::Tcl_EvalObjv(pInterp, objc, &tclArgs[0], TCL_EVAL_GLOBAL); //<--
::Tcl_HideCommand(pInterp, ORIGINAL_UNKNOWN, ORIGINAL_UNKNOWN);
// ORIGINAL_UNKNOWN is char* it is just "unknown"

我们在应用程序中为命令设置了处理程序,而执行Tcl_EvalObjv in CmdUnknown()函数Tcl有时会调用不同的命令。举例如下:

现有命令列表:“香蕉”、“苹果皮”、“地毯”、“卡片”

命令:"apple",Tcl称"applepie“(错,"apple”不是"applepie")

命令:"blah",Tcl给出错误(正确)。

命令:"car",Tcl给出错误(正确,可能是因为两个类似的命令)。

Tcl在搜索命令失败时是否存在某种机制?问题是,我找不到任何与我们的代码相关的东西来完成命令,所以也许Tcl会这么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 16:23:10

正如格伦所暗示的,交互式(REPL)模式中的Tcl允许使用一些最小但不含糊的名称前缀来分配命令。我不知道您的嵌入式Tcl是如何配置、初始化并以交互模式运行的。但是,您可能希望“关闭”(切换)交互模式,方法是:

代码语言:javascript
复制
unset ::tcl_interactive

代码语言:javascript
复制
set ::tcl_interactive 0

所有这些都是由默认的unknown处理程序实现的。注意如何查找cmds列表,以及如何在tcl_interactive为真或假时对其进行不同的处理:

代码语言:javascript
复制
puts [info body unknown]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53302415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档