2015-06-17 136 views
0

我想用字典更新字典,但它似乎沒有更新任何值。例如:TCL:更新字典內「字典與」

set test1 [dict create] 
dict set test1 INST1 ports PORT1 type Q 
dict set test1 INST1 ports PORT1 reset X 
dict set test1 INST1 ports PORT2 type Qbar 
dict set test1 INST1 ports PORT2 reset X 

dict for {id data} $test1 { 
    set resetVal 0 
    dict with data { 
     dict for {portName portInfo} $ports {   
      dict with portInfo { 
       if {$type == "Q"} { 
        set reset $resetVal 
       } elseif {$type == "Qbar"} { 
        set reset [expr $resetVal^1] 
       } 
      } 
     } 
    } 
} 

puts "PORT1=[dict get $test1 INST1 ports PORT1 reset]" 
puts "PORT2=[dict get $test1 INST1 ports PORT2 reset]" 

它打印:

PORT1=X 
PORT2=X 

如何更新 「重置」 使用字典與價值?

回答

1

我不確定你是否可以像那樣嵌套它們。嘗試

set resetVal 0 
foreach port {PORT1 PORT2} { 
    dict with test1 INST1 ports $port { 
     if {$type eq "Q"} { 
      set reset $resetVal 
     } elseif {$type eq "Qbar"} { 
      set reset [expr {$resetVal^1}] 
     } 
    } 
} 

文檔:dictexprforeachifset

+0

可以嵌套他們,但效果可能不是你所期望的。 ''dict with'不使用變量鏈接(它通過將事物複製到主體的末尾來工作),因此需要小心。 –