我遇到了一个问题,变量被解释为字符串,而不是预期的值。
我试图将成对的数字附加到一个列表中,按curlys进行分组,但它不适用于变量替换。
set new_list {}
lappend new_list {4 5}
lappend new_list {7 8}
puts "$list"输出:
{4 5} {7 8}这是所需的格式。但是,当我尝试以下操作时,假设我希望所有整数都为10,并且它们的平方值以对的形式附加到列表中:
for {set i 0} {$i < 10} {incr i} {
lappend new_list {$i [expr pow($i, 2)]}
}输出:
{$i [expr pow($i, 2)]} {$i [expr pow($i, 2)]} {$i [expr pow($i, 2)]} {$i [expr pow($i, 2)]} .... and so on ....我想要整数对形式的值:{1 1} {2 4} {3 9} ...
在实现这一点上有帮助吗?
发布于 2020-04-24 19:57:31
您必须在执行lappend时评估单词(表达式等)。为此,构建要附加list构造命令的子列表:
for {set i 0} {$i < 10} {incr i} {
lappend new_list [list $i [expr {$i ** 2}]]
}大括号本身的意思是“现在不要扩展其中的任何内容”。(这就是它们在Tcl中的实际含义。只是有些命令,比如for,会立即使用它们内部的内容来完成它们的工作。)在这种情况下,您可以将要插入的内容放在双引号中,但这是不好的做法,因为一旦开始使用真实的数据(例如,人们的姓氏中有空格),它可能会咬您一口;list命令是专门设计的(对进行了彻底的测试),没有这样的弱点。
在本例中,我将编写$i ** 2而不是pow($i, 2),因为后者总是生成浮点结果,而前者对数值类型很敏感(就像其他expr操作符一样)。
https://stackoverflow.com/questions/61403416
复制相似问题