多重作业

Rob*_*ugg 2 tcl

我想做以下类似Python的操作:

set var [list 1 2 3]
set {x y z} $var
puts "$x $y $z"
Run Code Online (Sandbox Code Playgroud)

其中 var 中的第一个元素分配给 x,依此类推。上面的代码不起作用,因为它创建了一个名为 的变量x y z

有没有办法做到这一点?我的真实情况是我想从函数返回多个值并将每个值分配给不同的变量。在最坏的情况下,我可以返回一个具有可识别名称的字典,但更喜欢这种方法。

Jer*_*rry 5

如果您收到包含所需结果的列表,您可以执行以下操作:

proc someFunction {} {
    return [list valA valB valC]
}

lassign [someFunction] x y z
puts "First: $x, second: $y, third $z"
# => First: valA, second: valB, third: valC
Run Code Online (Sandbox Code Playgroud)

lassign适用于 Tcl 8.5 及更高版本。


在你的具体例子中:

set var [list 1 2 3]
lassign $var x y z
puts "$x $y $z"
Run Code Online (Sandbox Code Playgroud)