0

我在父函数中有一个嵌套列表,我想在其中一个被调用函数中附加一些元素

proc myparent {
  set mylist {}
  foreach elem $listelements {
     lappend mylist $elem
  }
 
  #at this point, mylist looks something like this:
  # {  {var1 val1} {var2 val2} {var3 val3} }

  myproc1 mylist    #--> want to append mylist here
  
  #myproc1 is expected to add another sublist to mylist. mylist after myproc1 should look like this:
  #  { {var1 val1} {var2 val2} {var3 val3} {abc def} }

  myproc2 $mylist   #--> need to use the updated mylist here
}

在 myproc1 中,我想将一些元素附加到 mylist。我尝试了以下方法:

   myproc1 { {list_var -list} } {
       upvar $list_var list_local
       #some conditional logic
       lappend list_local [list "abc" "def"]
   }

  

但它没有按预期工作。upvar 是用于此要求的正确构造吗?

4

1 回答 1

0

将项目添加到存储在调用者中的列表的正确方法是:

proc myproc1 {list_var} {
    upvar 1 $list_var list_local

    if {[$I want to add something]} {
        lappend list_local $one_element $another_element
        lappend list_local $a_third_element
    }
}

建议您始终输入级别计数(1在这种情况下使用),因为它至少可以在某些版本上实现高效的代码生成。也更清楚了。完成 后upvar,变量同时有效地存在于两个地方。

如果您lappendlist,则您正在制作子列表;每个参数(在变量名之后)lappend成为它自己的一个元素。

于 2021-07-06T20:33:38.933 回答