我是Tcl / tk的初学者,在程序中访问数组面临问题
下面是我的问题陈述
proc myproc {args} {
set aaa ""
set bbb ""
set ccc ""
foreach "field value" $args {
set $field $value
}
# assigning input args values to an array a
set a(3:0) $aaa
set a(6:4) $bbb
set a(25:7) $ccc
#do some computation on input arguments may be addition
#
#
#
# now the result am trying to fetch into another array b
set $b(word0) $x
set $b(word1) $y
set $b(word2) $z
set $b(word3) $u
return [array get b]
}
现在我需要将参数传递给myproc并返回我需要访问的数组。
set args_1 "g 1 h 4 k 6"
我尝试了下面的语法,它让我犯了错误。
array set a [myproc[array get $args_1]]
有人可以帮助我解决这个问题
尝试将字符串作为过程myproc的输入
后来尝试用输入值进行一些计算。
稍后所有计算得到一组字符串值后,分配给数组如下
set $b(word0) $x
set $b(word1) $y
set $b(word2) $z
set $b(word3) $u
希望将此数组b
作为返回发送。
示例:
proc myproc {} {
set $b(word0) $x
set $b(word1) $y
set $b(word2) $z
set $b(word3) $u
return [array get b]
}
我试图访问数组b,如下所示
array set a [myproc[array get b]]
它工作:)能够在调用函数中创建新数组。
但是,需要将字符串参数传递给myproc并以数组
的形式返回答案 0 :(得分:1)
这个功能看起来不错。可能有更好的方法来编写它,但它本质上是可以的。
但是如何调用该函数会有一些问题。
首先,您会混淆数组和列表。在tcl中,数组是键值对的集合。其他语言称之为“哈希”或“地图”。列表听起来像是:值列表。其他语言称之为“数组”或“列表”。
所以,先关闭:
tcl other languages
--- ---------------
array = hash
list = array
选择名称“数组”是因为键值对集合的概念在计算机科学中称为“关联数组”。这个术语早于使用“数组”一词来表示C和Java等语言中的值列表。
所以,在这里你要宣布一个清单:
set args_1 "g 1 h 4 k 6"
你正试图以数组形式访问它:
array get $args_1
哪个错误会导致$args_1
不是数组。事实上这是真的。
因此,只需将其替换为列表变量:
$args_1
这给了我们:
array set a [myproc$args_1]
这应该抛出另一个错误,它基本上表示函数myproc g 1 h 4 k 6
不存在。是的,在tcl中,在函数名称中包含空格是有效的。例如:
proc "an example" {} {return "an example"}
这是有效的代码。你这样称呼它:
set x ["an example"]
因此毫无疑问,tcl无法找到一个名为“myproc g 1 h 4 k 6”的函数。
这意味着在tcl中空白是重要的。你做不到:
set x [y[z]]
这很可能是语法错误。它应该是:
set x [y [z]]
# ^
# |______ whitespace was missing
所以你的代码应该是:
array set a [myproc $args_1]