我必须在一个puts
中打印多个变量,就像这样
puts "$n1_$n2_$n3_$n4"
其中n1
,n2
,n3
,n4
是4个变量。
它不会打印并显示错误n1_ : no such variable
预期输出应该是这样的(例子)
01_abc_21_akdd
答案 0 :(得分:1)
Tcl中的变量名可以是Tcl中的任何字符串,没有限制但是如果你想使用特殊字符(那些不在a-z
,0-9
和_
范围内的字符,以及不同语言的字母,具体取决于平台和区域设置),您必须支持表达式名称或使用其他解决方法(如Hoodiecrow的答案)。
这意味着,如果您有一个名为abc.d
的变量,并且使用$abc.d
,则Tcl引擎会尝试查找变量$abc
,因为.
不是正常的'字符。
但如果你有一个名为abc
的变量并使用$abcd
或$abc_d
,那么引擎会开始寻找变量abcd
或abc_d
和不 abc
。
因此,您必须在变量名之间使用大括号,例如:
${n1}
使用反斜杠的原因是\
不是正常的'在阅读上述内容之后,事情的运作方式应该更加明显。
有一些东西可以用变量名称来表示,它们不需要支撑,但仍然意味着什么,除了某些东西是特殊的':
::
:这通常用于范围界定。例如,如果您有一个名为my_var
的全局变量,您也可以使用$::my_var
来引用它。这里::
告诉Tcl my_var
是一个全局变量。请注意,如果一行中有两个以上:
,则不会加起来:
% set ::y 5
5
% set ::::y
5
% set :::y
5
::
通常用于定义变量所在的命名空间。例如,$mine::var
是名称空间中名为var
的名为mine
的变量。
()
:这些用于数组。 $arr(key)
是一个包含两部分的变量:数组名称arr
和密钥名称key
。注意:您可以拥有一个名为的数组和一个名为
的键,因为......
% set () abc
abc
% puts $()
abc
% array get ""
{} abc
可能会有更多,但这些是你可以留意的基础。
答案 1 :(得分:0)
另外两种方式:
puts "${n1}_${n2}_${n3}_${n4}"
puts [format "%s_%s_%s_%s" $n1 $n2 $n3 $n4]
文档:format
(注意:Jerry的答案中提到的'Hoodiecrow'是我,我之前使用过那个昵称。)