【发布时间】:2018-11-18 22:08:39
【问题描述】:
我是 Tcl 新手,所以我正在学习基础知识。我写了一个函数来计算数组的总和并打印它的元素。这是代码
proc print_sum { tab } {
set s 0
foreach key [array names tab] {
puts "${key}=$tab($key)"
incr $s $tab($key)
}
puts "the sum = $s"
}
我是这样称呼它的:
print_sum tab
我创建了这样的标签:
set tab("1") 41
set tab("m2") 5
set tab("3") 3
set tab("tp") 9
set tab("2") 7
set tab("100") 16
但是输出错误!它输出 0 而不是实际的总和,并且不输出任何元素。但是当我直接使用代码而不写在函数中时,它可以工作。
【问题讨论】:
-
欢迎您!请。提供您尝试过的MVE。您显示的 sn-ps 不会按原样执行而不会出错。例如,
print_sum $tab肯定不会成功,但会给出 sth。沿线can't read "tab": variable is array。在我看来,您在发布之前重写了您的示例,而不是实际执行您发布的内容。 -
除此之外:注意
incr期望一个变量名 (s),而不是它当前保持的值 ($s)。此外,您可能需要考虑使用tcl::mathop::+,而不是逐步使用incr。 -
我更新了我的代码.. 现在它执行得很好但输出仍然是 0
-
不,您的编辑只能解决一种错误情况。它不能解决它。首先,确保您了解how to pass around an array in Tcl。其次,看看我之前关于
incr的评论。一步一步,你在你的 sn-p 中加入了两个问题。 -
stackoverflow.com/questions/53364162/… 的重复(这是 相同 问题,尽管是在列表而不是数组上)。
标签: tcl