首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在调用方上下文中包含列表变量的打印表达式

在调用方上下文中包含列表变量的打印表达式
EN

Stack Overflow用户
提问于 2019-11-07 19:47:48
回答 1查看 38关注 0票数 1

我正在尝试在TCL中实现一个命令记录器,其中每个命令都被打印包在调用者上下文中执行。

该方法还应该通过在正确的位置添加list关键字来扩展引用列表或列表的变量。

例如:

代码语言:javascript
复制
proc exec_cmd {cmd} {
   uplevel puts \"$cmd\"
   uplevel $cmd
}

proc somefunc {inlist1 inlist2} {
...
}

set x [list "P" "Q" "R"]
set y [list [list "A" "B"] [list "X" "Y"]]
exec_cmd {somefunc $x $y}

在上面的示例中,我希望记录器打印[list P Q R][list [list A B] [list [X Y]],而不是$x$y

我该怎么做?

到目前为止,这是我尝试过的,但这并不像我想要的那样有效:

代码语言:javascript
复制
proc exec_cmd {cmd} {
    set stripped [string map {\" {} [ \[ ] \]} $cmd]
    uplevel puts \"$stripped\"
    uplevel $cmd
}

对于上面的例子,我得到的输出是:

代码语言:javascript
复制
somefunc P Q R {A B} {X Y}

但我想要的是

代码语言:javascript
复制
somefunc [list P Q R] [list [list A B] [list X Y]]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-07 20:41:29

该方法还应该通过在正确的位置添加list关键字来展开引用列表或列表列表的变量。

目标是什么,产生一个可执行片段来重放记录的命令执行?在任何情况下,使用list命令表单序列化变量的值被认为是一个列表,对于您的记录器来说并不特别有意义。此外,这在Tcl中是不可能的,在列表执行之后,它是一个列表,不管它的诞生形式( Tcl值如何成为列表有很多种方法)。这是一个迷失的演员.

我正在尝试在TCL中实现一个命令记录器

您是否考虑过一些内置机制来设置您的期望和/或将您的实现建立在基础之上?执行跟踪将向您展示您可以从记录器的角度来预期什么:

代码语言:javascript
复制
% proc report args {puts [info level 0]}
% trace add execution somefunc enter report
% somefunc $x $y
report {somefunc {P Q R} {{A B} {X Y}}} enter

重新实现这一点你自己,可行,但繁琐(例如,你需要确保你不产生副作用,通过先发制人的命令评估时,预处理一个被截获的命令的参数)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58755960

复制
相关文章

相似问题

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