gpt4 book ai didi

list - 如何将列表传递给 TCL 中的 proc?

转载 作者:行者123 更新时间:2023-12-01 06:29:45 29 4
gpt4 key购买 nike

似乎是一个基本问题,但我无法在任何地方找到答案:-S

我对下面的实验感到困惑:

Tcl 8.5.13 interactive shell
% set args [list 1 2 3]
1 2 3
% llength $args
3
% set argv $args
1 2 3
% llength $argv
3
% set argv ${args}
1 2 3
% llength $argv
3

到目前为止还不错,但是接下来:

% proc test { args } { set argv ${args}; set argc [llength $argv]; return $argc}
% test $args
1

看起来列表在参数传递期间变成了字符串。有人可以解释这里发生了什么吗??

到目前为止我发现的唯一解决方法是这个:

% proc test2 { argsName } { upvar 1 $argsName args; set argv ${args}; set argc [llength $argv]; return $argc}
% test2 args
3

还有什么建议吗?

最佳答案

您的问题是参数名称 args 具有特殊含义。

来自manual of proc :

If the last formal argument has the name args, then a call to the procedure may contain more actual arguments than the procedure has formal arguments. In this case, all of the actual arguments starting at the one that would be assigned to args are combined into a list (as if the list command had been used); this combined value is assigned to the local variable args.

因此,如果您为参数使用任何其他名称,它会正常工作。


args 的使用示例:

proc putargs args {
puts $args
}

# Call with more than one argument
putargs foo bar
# Use as command prefix for callbacks.
trace add execution glob {enter leave} {list putargs GLOB}

关于list - 如何将列表传递给 TCL 中的 proc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16310050/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com