set A { 50 98 76 34 67}
set B { 12 23 48 59 65}
foreach c $A d $B {
if { (40 <= $c && $c <= 60) || (20 <= $d && $d <= 30) } {
puts $c
puts $d
}
}
我得到的輸出是 50 12 98 23 但它應該是 50 和 23。
uj5u.com熱心網友回復:
您似乎對您撰寫的代碼的真正后果感到非常困惑。
這foreach通過變數將兩個串列中的成對元素呈現給正文腳本。也就是說,你得到50,12,然后98,23,然后76,48,......
您的正文腳本由一個單一的if測驗組成(恰好是一個復合運算式,但總體上它仍然是一個單一的測驗),如果該測驗為真,它將運行它的正文。
正文列印兩個變數。
這就是你告訴語言要做的事情。它已經為你做到了。電腦讀不懂你的心思;它知道該做什么的唯一方法是因為有人告訴它該做什么。
我猜你可能會喜歡:
set A { 50 98 76 34 67}
set B { 12 23 48 59 65}
foreach c $A d $B {
if {40 <= $c && $c <= 60} {
puts $c
}
if {20 <= $d && $d <= 30} {
puts $d
}
}
甚至這樣:
proc when {value in range from to do body} {
if {$from <= $value && $value <= $to} {
uplevel 1 $body
}
}
set A { 50 98 76 34 67}
set B { 12 23 48 59 65}
foreach c $A d $B {
when $c in range 40 60 do {puts $c}
when $d in range 20 30 do {puts $d}
}
一旦你理解了它的作業原理,你就會對 Tcl 和一般編程的理解更進一步。
uj5u.com熱心網友回復:
這是否意味著成對 XOR(異或)?如果是這樣,包含或||運算子將無濟于事。
您可以考慮重寫為:
set A {50 98 76 34 67}
set B {12 23 48 59 65}
foreach c $A d $B {
if {40 <= $c && $c <= 60} {
puts $c
} elseif {20 <= $d && $d <= 30} {
puts $d
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/517952.html
