首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TCL不能在大括号内使用变量替换

TCL不能在大括号内使用变量替换
EN

Stack Overflow用户
提问于 2020-04-24 15:39:44
回答 1查看 93关注 0票数 1

我遇到了一个问题,变量被解释为字符串,而不是预期的值。

我试图将成对的数字附加到一个列表中,按curlys进行分组,但它不适用于变量替换。

代码语言:javascript
复制
set new_list {}
lappend new_list {4 5}
lappend new_list {7 8}
puts "$list"

输出:

代码语言:javascript
复制
{4 5} {7 8}

这是所需的格式。但是,当我尝试以下操作时,假设我希望所有整数都为10,并且它们的平方值以对的形式附加到列表中:

代码语言:javascript
复制
for {set i 0} {$i < 10} {incr i} {
    lappend new_list {$i [expr pow($i, 2)]}
}

输出:

代码语言:javascript
复制
{$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} ...

在实现这一点上有帮助吗?

EN

Stack Overflow用户

发布于 2020-04-24 19:57:31

您必须在执行lappend时评估单词(表达式等)。为此,构建要附加list构造命令的子列表:

代码语言:javascript
复制
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操作符一样)。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61403416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档