将数组值设置为列表

时间:2015-04-27 06:45:57

标签: tcl

我在使用这段代码时遇到了问题:

    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。我不明白我的函数参数是不正确的还是我错误地传递了参数。

1 个答案:

答案 0 :(得分:2)

您没有使用正确数量的参数。

drawX $rect($i)

这是一个只有一个参数的函数调用。如果要扩展这些参数,则需要在其上使用expand运算符(8.5 +)。

drawX {*}$rect($i)

在较旧的版本中,可以通过某些eval魔法来完成。