我在使用这段代码时遇到了问题:
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
。我不明白我的函数参数是不正确的还是我错误地传递了参数。
答案 0 :(得分:2)
您没有使用正确数量的参数。
drawX $rect($i)
这是一个只有一个参数的函数调用。如果要扩展这些参数,则需要在其上使用expand运算符(8.5 +)。
drawX {*}$rect($i)
在较旧的版本中,可以通过某些eval
魔法来完成。