Forum OpenACS Q&A: Re: How to upvar an array in a recursive procedure

Collapse
Posted by Steffen Christensen on

Simon,

You can't pass arrays (I don't think so...). Instead you may want to try using a list as the $arr_parent_list argument:

get_tree $children [lindex $elements $i] [array get parent] $level

and afterwards:

array set parent $arr_parent_list

/stc

Collapse
Posted by Jeff Davis on
One thing is that for upvar things are passed around by reference (i.e. their name, not their value). Here is an example:
set x(10) foo
proc y { v } {
  puts $v
  upvar $v zim
  puts $zim
}
%  y x(10)
x(10)
foo
% y x
x
can't read "zim": variable is array
% y $x(10)
foo
can't read "zim": no such variable
% y $x
can't read "x": variable is array
So when you call
get_tree $children [lindex $elements $i] $parent $level
$parent is not a string it's an array. What you really want is the string literal "parent" (or some other string literal I did not read the code that closely).