Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcl 将数组值设置为列表_Tcl - Fatal编程技术网

Tcl 将数组值设置为列表

Tcl 将数组值设置为列表,tcl,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)

我对这段代码有问题:

    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
}
set rect(1)[列表0$x1$y1]
set rect(2)[列表$x1 0$x2$y1]
set rect(3)[列表$x2 0$x3$y1]
set rect(4)[列表0$y1$x1$y2]
set rect(5)[列表$x1$y1$x2$y2]
set rect(6)[列表$x2$y1$x3$y2]
set rect(7)[列表0$y2$x1$y3]
set rect(8)[列表$x1$y2$x2$y3]
set rect(9)[列表$x2$y2$x3$y3]
#通过正方形进行迭代,x代表1,o代表2
对于{set i 1}{$i<10}{incr i}{
如果{$squares(s$i)==1}{
drawX$rect($i)#这部分很麻烦
}elseif{$squares(s$i)==2}{
.whole.board创建椭圆形$rect($i)
}
}
proc drawX{x1 y1 x2 y2}{
.全板创建线$x1$y1$x2$y2-宽度3-填充红色
.全板创建线$x2$y1$x1$y2-宽度3-填充红色
}

基本上,我得到的错误
是错误的#args:应该是“drawX x1 y1 x2 y2
。我不知道我的函数参数是否不正确,或者我是否错误地传递了参数。

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

drawX $rect($i)
这是一个只有一个参数的函数调用。如果要展开这些参数,需要对其使用展开运算符(8.5+)


在较旧的版本中,可以使用一些
eval
magic来完成。

如果没有展开运算符,我会将列表作为一个参数传递吗?@renrenren29是的,正是这样。但是,
$canvas create line
操作(以及所有其他项构造函数)也可以将坐标作为一个单一列表;由您的过程强制将它们分开。老实说,这可能是一件明智的事情……这是一个不同的问题吗?我真的无法回答。在这个问题中,我问的是我在其他人的代码中发现的几个变量的性质。在这个问题中,我在不正确。
drawX {*}$rect($i)