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

舒张期公爵

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

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

例如:

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

我怎样才能做到这一点?

这是我迄今为止尝试过的,但这并不像我想要的那样工作:

proc exec_cmd {cmd} {
    set stripped [string map {\" {} [ \[ ] \]} $cmd]
    uplevel puts \"$stripped\"
    uplevel $cmd
}

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

somefunc P Q R {A B} {X Y}

但我想要的是:

somefunc [list P Q R] [list [list A B] [list X Y]]
卡尔文

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

目标是什么,生成一个可执行片段来重放记录的命令执行?在任何情况下,使用 [list] 命令形式序列化变量的值对于您的记录器来说都没有特别意义。此外,这在 Tcl 中是不可能的,在 [list] 执行之后,无论其出生形式如何,它都是一个列表(Tcl 值可以通过多种方式成为列表)。这是一个消失形式的演员......

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

您是否考虑过一些内置机制来设定您的期望和/或基于您的实施?执行跟踪将从记录器的角度向您展示您可以期待的内容:

% 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

自己重新实现它,可行但乏味(例如,在预处理截获的命令的参数时,您需要确保不会通过抢占命令评估产生副作用)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

变量定义上下文中的非变量表达式编译错误

在常量表达式上下文中定义之前,嵌套的constexpr函数调用

如何在调用者的上下文中调用脚本块?

如何在调用者上下文中运行函数?

赋值不是表达式,在此上下文中只允许表达式 - Kotlin

Thymeleaf:在此上下文中仅允许返回数字或布尔值的变量表达式

在“lambda”和“匿名类”的上下文中理解 Java 中的“lambda 表达式”

SqlException:在需要条件的上下文中在')'附近指定的非布尔类型的表达式

在SFINAE上下文中使用的表达式中使用的static_assert

在接收器上下文中(第13行)在表达式“ -1”中无用的“-”

在需要条件的上下文中指定的非布尔类型的表达式

错误:“ int”之前的预期主表达式(在接受数组的函数的上下文中)

模式不适用于JSON上下文中的惰性正则表达式

在C ++ std :: function上下文中无效使用void表达式

C ++:未评估上下文中的lambda表达式

了解致命错误:无法在写入上下文中使用临时表达式

正则表达式匹配特定上下文中的关键字

在 Python 理解的上下文中什么是 **iterable 表达式**?

错误:在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'

正则表达式:在上下文中匹配特定字符

EF Core:如何在不同的查询上下文中重用相同的表达式

在预期条件的上下文中指定的非布尔类型的表达式,靠近“@where”

表达式上下文中“ yield”的用途是什么?

关于在期望条件的上下文中指定的非布尔类型的表达式的困惑

在需要条件的上下文中指定的非布尔类型的表达式,

在需要条件的上下文中在“)”附近指定的非布尔类型的表达式。错误

在预期条件的上下文中在“ AdmissionID”附近指定的非布尔类型的表达式

'在预期条件的上下文中指定的非布尔类型的表达式,靠近'Id'。

案例错误:在预期条件的上下文中指定的非布尔类型的表达式