TCL subst 或 eval 命令在我的情况下不起作用..

2024-01-05

subst or eval command is not working in my case .. 

% proc sum {a b} {
    return [expr $a+$b]
}
%
% set a 1
1
% set b 2
2
% sum $a $b
3

%
% sum {$a} {$b}
can't use non-numeric string as operand of "+"

%
% subst [sum {$a} {$b}]
can't use non-numeric string as operand of "+"   >>>>>>>>> Why i am unable to substitue the value
%

% eval [sum {$a} {$b}]
can't use non-numeric string as operand of "+"    >>>>>>>>> Why i am unable to substitue the value
%

我想知道为什么上述情况对我不起作用.. subst 命令应该执行变量和命令替换。但为什么我的变量没有替代。

谁能解释一下发生了什么事吗?


首先,你确实明白为什么“$a“这不是你可以增加的价值吗?这根本不是一个数字。 (我的意思不是$a,从变量读取并替换它的指令,我的意思是由一个组成的字符串$随后是一个a.)

当你在 Tcl 中将大括号括起来时,它的意思是“根本不要对这个字符串做任何事情;按原样使用”。总是。 (有时您将该字符串输入到要计算的命令中,但并非总是如此。)当您将方括号括起来时,这意味着将该字符串作为脚本进行计算立即地并使用脚本的结果作为要替换的值。总是。

当你这样做时:

subst [sum {$a} {$b}]

您需要了解调用sum在组装参数时完成subst。该调用会产生错误,因此调用subst永远不会发生。同样与eval您使用的表格。

如果我们使用一种不太令人惊讶的形式:

subst {sum {$a} {$b}}

然后你就会得到这个:sum {1} {2}. subst无法将整个字符串理解为脚本。另一方面,与:

eval {sum {$a} {$b}}

在这种情况下,您得到的错误不是来自eval因此,而是从以下事实出发:调用sum里面还是错误的。

我想你可以这样做:

eval [subst {sum {$a} {$b}}]

但确实没有。必须有一种更简单且不易出错的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCL subst 或 eval 命令在我的情况下不起作用.. 的相关文章

  • 如何在 SwiftUI 的列表中启用选择

    我正在尝试使用 SwiftUI 创建一个简单的多重选择列表 我无法让它发挥作用 List 采用第二个参数 即 SelectionManager 因此我尝试创建一个具体的实现 但是 它永远不会被调用 行也永远不会突出显示 import Swi

随机推荐