2013-07-19 40 views
0

上午初学的Tcl/Tk访问数组结果的过程,在过程使用TCL

下面

访问阵列面临的问题是我的问题发言

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

请通过[教程](http://www.tcl.tk/man/tcl8.5/tutorial/自己的工作tcltutorial.html)至少在着手编写真正的代码之前。 – kostix

回答

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的摹1个小时的4k 6”的功能。

这意味着tcl中的空格是重要的。你不能这样做:

set x [y[z]] 

这很可能是一个语法错误。它应该是:

set x [y [z]] 
#  ^
#  |______ whitespace was missing 

所以,你的代码应该是:

array set a [myproc $args_1] 
+1

你应该提到'dict',因为这更像是一个散列; TCL的阵列系统即将成为_variables _... –

+0

@slebetman的集合, 感谢答复, 我已经更新了我的话题评论...的审查要求,并帮助 – wineyekumar

+0

@slebetman:谢谢,你的反应和帮助现在能够使用您建议的解决方案访问阵列。 – wineyekumar