将数组值设置为列表
Setting array value as a list
我在使用这段代码时遇到问题:
set rect(1) [list 0 0 $x1 $y1]
set rect(2) [list $x1 0 $x2 $y1]
set rect(3) [list $x2 0 $x3 $y1]
set rect(4) [list 0 $y1 $x1 $y2]
set rect(5) [list $x1 $y1 $x2 $y2]
set rect(6) [list $x2 $y1 $x3 $y2]
set rect(7) [list 0 $y2 $x1 $y3]
set rect(8) [list $x1 $y2 $x2 $y3]
set rect(9) [list $x2 $y2 $x3 $y3]
#iterate thru squares, x for 1, o for 2
for {set i 1} {$i < 10} {incr i} {
if {$squares(s$i) == 1} {
drawX $rect($i) #This part is troubling
} elseif {$squares(s$i) == 2} {
.whole.board create oval $rect($i)
}
}
proc drawX {x1 y1 x2 y2} {
.whole.board create line $x1 $y1 $x2 $y2 -width 3 -fill red
.whole.board create line $x2 $y1 $x1 $y2 -width 3 -fill red
}
基本上,我遇到了错误 wrong # args: should be "drawX x1 y1 x2 y2
。我不明白是我的函数参数不正确还是我传递的参数不正确。
您没有使用正确数量的参数。
drawX $rect($i)
这是一个只有一个参数的函数调用。如果要扩展这些参数,则需要对其使用扩展运算符 (8.5+)。
drawX {*}$rect($i)
在旧版本中,可以使用一些 eval
魔法来完成。
我在使用这段代码时遇到问题:
set rect(1) [list 0 0 $x1 $y1]
set rect(2) [list $x1 0 $x2 $y1]
set rect(3) [list $x2 0 $x3 $y1]
set rect(4) [list 0 $y1 $x1 $y2]
set rect(5) [list $x1 $y1 $x2 $y2]
set rect(6) [list $x2 $y1 $x3 $y2]
set rect(7) [list 0 $y2 $x1 $y3]
set rect(8) [list $x1 $y2 $x2 $y3]
set rect(9) [list $x2 $y2 $x3 $y3]
#iterate thru squares, x for 1, o for 2
for {set i 1} {$i < 10} {incr i} {
if {$squares(s$i) == 1} {
drawX $rect($i) #This part is troubling
} elseif {$squares(s$i) == 2} {
.whole.board create oval $rect($i)
}
}
proc drawX {x1 y1 x2 y2} {
.whole.board create line $x1 $y1 $x2 $y2 -width 3 -fill red
.whole.board create line $x2 $y1 $x1 $y2 -width 3 -fill red
}
基本上,我遇到了错误 wrong # args: should be "drawX x1 y1 x2 y2
。我不明白是我的函数参数不正确还是我传递的参数不正确。
您没有使用正确数量的参数。
drawX $rect($i)
这是一个只有一个参数的函数调用。如果要扩展这些参数,则需要对其使用扩展运算符 (8.5+)。
drawX {*}$rect($i)
在旧版本中,可以使用一些 eval
魔法来完成。