愿意接受TCL专业人士的建议,以获得最佳实践。
假设您想使用proc构造一个包含特定数据的列表。现在,哪种方法是最好的?
proc processList { myList } {
upvar $myList list_
#append necessary data into list_
}
proc returnList {} {
set list_ {}
#append necessary data into list_
return $list_
}
set list1 {}
processList list1
set list2 [returnList ]以下哪种做法是推荐的?
编辑:很抱歉,我不能理解回答这个问题的人的共识(和解释)。
发布于 2011-06-24 16:32:08
我几乎总是使用第二种方法:
proc returnList {} {
set result {}
# ... accumulate the result like this ...
lappend result a b c d e
return $result
}
set lst [returnList]在内存使用或速度上几乎没有区别,但我发现从功能上考虑更容易一些。此外,在TCL8.5中,您可以相对简单地对结果列表进行拆分(如果这是您需要的):
set remainderList [lassign [returnList] firstValue secondValue]这样,您就可以在$firstValue中使用a,在secondValue中使用b,在$remainderList中使用c d e。
发布于 2011-06-24 16:25:51
第一个选项修改现有列表,而第二个选项创建新列表。为了更好地进行比较,我将向returnList()添加一个参数,并从该参数创建返回值。
鉴于此,不同之处在于传递参数的方式--通过引用还是通过值--以及每个操作所需的内存预算。
第二种方法没有副作用,但如果列表很大,它可能会非常消耗资源。
没有推荐其中一个的一般规则。我自己的规则是从第二种方法开始,除非其他限制导致不这样做。
发布于 2014-03-05 04:24:59
等价物的语法是什么:
set lst [returnList]如果你想一次返回多个列表?
我想如果你这样做的话:
return [$list1 $list2]它应该返回一个列表列表,然后可以使用lindex访问该列表。但是,这似乎并不完全是它所做的。它实际上只返回了两个列表,没有外部大括号将它们分组到一个列表中。在Perl中,您可以执行以下操作:
($var1, $var2) = process_that_returns_two_values;但我不认为"set“允许在Tcl中这样做。
https://stackoverflow.com/questions/6465033
复制相似问题