将数组值设置为列表

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 魔法来完成。