Tcl 如何将两个变量相加并将结果存储到另一个变量中?

Tcl 如何将两个变量相加并将结果存储到另一个变量中?,tcl,Tcl,我想不出最基本的Tcl语法,写以下内容的正确方法是什么: set var1 5 set var2 3 set var3 $var1 - $var2; # error line puts $var3 试一试 set var3[expr$var1-$var2]Tcl没有用于数学运算的语法。相反,它依赖expr命令/函数进行计算: set var3 [expr $var1 - $var2] 最佳做法是只为大括号引用的expr提供一个参数,以避免出现诸如双重替换之类的微妙问题: set var

我想不出最基本的Tcl语法,写以下内容的正确方法是什么:

set var1 5
set var2 3
set var3 $var1 - $var2; # error line

puts $var3

试一试


set var3[expr$var1-$var2]

Tcl没有用于数学运算的语法。相反,它依赖
expr
命令/函数进行计算:

set var3 [expr $var1 - $var2]
最佳做法是只为大括号引用的
expr
提供一个参数,以避免出现诸如双重替换之类的微妙问题:

set var3 [expr {$var1 - $var2}]

在Tcl中,您需要评估功能:

set var3 [expr {$var1 - $var2}]
但是,在处理索引时,您可以在Tcl 8.5+中跳过它们,例如:

% set numberlist [list 1 2 3 4]
% set index 2
% puts [lindex $numberlist $index-1]
2
否则,在旧版本中,您必须再次使用
expr

% set numberlist [list 1 2 3 4]
% set index 2
% puts [lindex $numberlist [expr {$index-1}]]
2

虽然不需要,但最好在中放大括号。

自从Tcl 8.5以来,数学运算符和函数也可以作为命令使用。检查
expr

的替代方案您忘记了方括号是的,现在太早了,而且TCL已经很久了。谢谢。第二,如果您喜欢
incr
而不是
expr
,您可以使用
incr
。谢谢。虽然我很欣赏字符串插值,但脚本语言在这么简单的事情上却要花这么多功夫(与C语言相比),这真是太奇怪了。@AndrejM。一旦你习惯了它,只需要很少的工作:)而且你不需要把
几乎每行之后,如果这还不够补偿的话!语言不仅仅是简单的脚本编写/编译划分。实际上,C也是一种脚本语言,因为有一种C解释器的实现,它可以运行C程序而无需编译,但Java是一种需要编译器的语言,即使它是一种必须在解释器(VM)上运行的语言。Tcl属于一个语法最少的语言家族,比如Forth和Lisp,该语言不能将数学作为语法的一部分,而是使用函数为您完成所有繁重的工作。