使用tcl访问过程中的数组结果

时间:2013-07-19 06:48:08

标签: arrays tcl

我是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并以数组

的形式返回

1 个答案:

答案 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]