3

我无法弄清楚最基本的Tcl语法,编写以下内容的正确方法是什么:

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

puts $var3
4

4 回答 4

5

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

set var3 [expr $var1 - $var2]

最佳实践是只提供一个expr由大括号引用的参数,以避免双重替换等微妙问题:

set var3 [expr {$var1 - $var2}]
于 2013-09-09T12:34:42.337 回答
4

在 Tcl 中,您需要expr用于评估的函数:

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

expressions中放置大括号是一种很好的做法,尽管您不必这样

于 2013-09-09T12:35:23.770 回答
1

http://www.beedub.com/book/2nd/tclintro.doc.html

http://www.astro.princeton.edu/~rhl/Tcl-Tk_docs/tcl/expr.n.html

尝试

设置 var3 [expr $var1 - $var2]

于 2013-09-09T12:34:33.380 回答
0

从 Tcl 8.5 开始,数学运算符和函数也可作为命令使用。检查mathop 手册的示例部分以获取expr.

于 2013-09-09T14:22:46.977 回答