【问题标题】:Returning arrays from Procedures in TCL从 TCL 中的过程返回数组
【发布时间】:2013-08-15 08:18:20
【问题描述】:

我想从过程中传递数组并返回数组,以下是我尝试过的示例代码。但是遇到一些错误..

set a(0) "11"
set a(1) "10"
set a(2) "20"
set a(3) "30"
set a(4) "40"

proc deleten somet {
    upvar $somet myarr
    for { set i 1} { $i < [array size myarr]} { incr i} {
        set arr($i) $myarr($i)
    }
    return arr
}

array set some[array get [deleten a]]
parray some

当我运行此代码时,我收到以下错误错误 # args: should be "array set arrayName list"。我很确定我不想使用列表,如何将 proc 返回的数组设置为另一个数组???

【问题讨论】:

  • 在该代码中做这件事似乎很奇怪。使用array set some [array get a];unset some(0)不是更简单吗?
  • 一般来说,我建议为您的变量和过程使用描述性名称。 deletensomet 之类的名称不能传达您的意图/目的。
  • 退后一步,您似乎可以根据需要使用列表而不是数组。我这样说是因为索引是连续的整数。请记住,在 Tcl 中,list 数据结构等价于 C 或 Java 等其他语言中的 array

标签: tcl


【解决方案1】:

您缺少的步骤是返回[array get arr] 而不仅仅是arr

下面的 sn-p 在这里工作

set a(0) "11"
set a(1) "10"
set a(2) "20"
set a(3) "30"
set a(4) "40"

proc deleten somet {
   upvar $somet myarr
   for { set i 1} { $i < [array size myarr]} { incr i} {
       set arr($i) $myarr($i)
   }
   return [array get arr]
} 

array set some  [deleten a]
parray some

更多信息请参见How to pass arrays

【讨论】:

  • Appleman1234 我已经发布了我尝试的代码作为答案,你能告诉我哪里出错了吗?
猜你喜欢
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多