从Tcl

时间:2017-12-30 19:26:44

标签: dictionary nested tcl

我有一个Tcl proc,可以从一个大文件中创建两个字典。它是这样的:

...
...
proc makeCircuitData {spiceNetlist} {
 #read the spiceNetlist file line by line
 # create a dict with multilevel nesting called elementMap that will have the following structure:
 # elementMap key1 key2 value12
 # elementMap keyA keyB valueAB
 # and so on
 # ... some other code here ...
 # create another dict with multilevel nesting called cktElementAttr that will have the following structure:
 # cktElementAttr resistor leftVoltageNode1 rightVoltageNode1 resValue11
 # cktElementAttr resistor leftVoltageNode2 rightVoltageNode2 resValue12
 # cktElementAttr inductor leftVoltageNode2 rightVoltageNode2 indValue11
 # cktElementAttr inductor leftVoltageNode2 rightVoltageNode2 indValue12
 # cktElementAttr capacitor leftVoltageNode2 rightVoltageNode2 capValue11
 # ... so on...   
}

我想返回这两个嵌套的词典:     来自上述类型过程的cktElementAttr和elementMap,因为这两个词典被我程序的其他部分使用。

从Tcl procs返回两个词典的推荐方法是什么?

感谢。

1 个答案:

答案 0 :(得分:2)

这应该有效:

return [list $cktElementAttr $elementMap]

然后,在调用者处,您可以将返回值分配给列表:

set theDictionaries [makeCircuitData ...]

或将它们分配给不同的变量:

lassign [makeCircuitData ...] cEltAttr elmMap

在Tcl 8.4或更早版本(已过时!)中,您可以(ab)使用foreach完成lassign的工作:

foreach {cEltAttr elmMap} [makeCircuitData ...] break

文档: breakforeachlassignlistreturnset