无法使用 TCL 评估 IF 和 For 循环中的变量
Cannot evaluating variable within IF and For loop using TCL
在 TCL 的以下代码中,我似乎无法计算变量 "a"
我正在评估 x 和 y,在同一个 For 循环中,我有一个 IF 语句正在检查 x 和 y 之间的范围。
如果有效,那么我想在 IF 条件下执行更多计算。
一切都符合 IF 条件,但我似乎无法评估 "a"。
我正在尝试为 $min <= $x && $x <= $max
范围内的所有值将 "a" 的值设置为 "y" 的值
请专家指出错误。
for {set i 0} {$i < $lenght} {incr i} {
set x [expr ([lindex $cal1 $i])*$offset]
set y [expr ((cal2)/2) ]
if {$min <= $x && $x <= $max } {
puts "is Active"
set a [lindex $y $i]
puts a = $a
}
}
您的代码中有很多问题。
在第一行中,您使用了变量 lenght
。 Tcl 不关心拼写,但是如果你没有这样的变量(你可能有一个 length
变量)你会得到一个错误。
在调用 expr ([lindex $cal1 $i])*$offset]
中,您有一个不必要的括号,但表达式周围没有大括号(大括号不是强制性的,但应该存在,除非有充分的理由省略它们).另外: "offset" 通常意味着你添加到另一个值,而不是乘以另一个值。调用expr {[lindex $cal1 $i] * $offset}]
会更好。
变量 y
稍后用作 lindex
的列表参数,但它是作为标量变量创建的。此外,您的表达式将一个字符串(或者更确切地说,一个无效的裸词)除以 2。也许您的意思是 lappend y [expr {$cal2 / 2}]
?如果您使用 lappend
,每个值将被添加到现有列表的末尾,或者如果 y
不存在,则作为新列表的第一个元素。这通常是人们想要的,但这意味着列表 y
应该在进入循环之前使用 set y [list]
或 set y {}
重置,以删除之前添加的元素(如果有的话)。
puts a = $a
将不起作用,因为如果 puts
有多个参数,它们应该是标志 -nonewline
and/or 将输出发送到的频道 ID。也许你的意思是 puts "a = $a"
.
在 TCL 的以下代码中,我似乎无法计算变量 "a"
我正在评估 x 和 y,在同一个 For 循环中,我有一个 IF 语句正在检查 x 和 y 之间的范围。
如果有效,那么我想在 IF 条件下执行更多计算。
一切都符合 IF 条件,但我似乎无法评估 "a"。
我正在尝试为 $min <= $x && $x <= $max
范围内的所有值将 "a" 的值设置为 "y" 的值请专家指出错误。
for {set i 0} {$i < $lenght} {incr i} {
set x [expr ([lindex $cal1 $i])*$offset]
set y [expr ((cal2)/2) ]
if {$min <= $x && $x <= $max } {
puts "is Active"
set a [lindex $y $i]
puts a = $a
}
}
您的代码中有很多问题。
在第一行中,您使用了变量
lenght
。 Tcl 不关心拼写,但是如果你没有这样的变量(你可能有一个length
变量)你会得到一个错误。在调用
expr ([lindex $cal1 $i])*$offset]
中,您有一个不必要的括号,但表达式周围没有大括号(大括号不是强制性的,但应该存在,除非有充分的理由省略它们).另外: "offset" 通常意味着你添加到另一个值,而不是乘以另一个值。调用expr {[lindex $cal1 $i] * $offset}]
会更好。变量
y
稍后用作lindex
的列表参数,但它是作为标量变量创建的。此外,您的表达式将一个字符串(或者更确切地说,一个无效的裸词)除以 2。也许您的意思是lappend y [expr {$cal2 / 2}]
?如果您使用lappend
,每个值将被添加到现有列表的末尾,或者如果y
不存在,则作为新列表的第一个元素。这通常是人们想要的,但这意味着列表y
应该在进入循环之前使用set y [list]
或set y {}
重置,以删除之前添加的元素(如果有的话)。puts a = $a
将不起作用,因为如果puts
有多个参数,它们应该是标志-nonewline
and/or 将输出发送到的频道 ID。也许你的意思是puts "a = $a"
.