我有以下if循环:
if { expr { $Node_3 eq "BadAngle" } } {
return "BadAngle"
}
Node_3可以是包含坐标的列表,也可以是简单字符串“BadAngle”
我使用TCLPro 1.4进行调试,并使用TCL 8.6。我得到:
*表达式“expr {$ Node_3 eq” BadAngle“}” * 中的语法错误
然后,我还尝试了:
if { [ expr { $Node_3 eq "BadAngle" ] == 1 } } {
return "BadAngle"
}
但是我得到了同样的错误。
另外:在这种情况下,更好的选择是什么:要使用“==”或“eq”,我认为“eq”是因为列表是一种字符串..or?
最佳答案
您似乎在那儿泡了些咸菜。首先,您可能不想在expr
条件内使用if
,因此这足够了:
if { $Node_3 eq "BadAngle" } {
return "BadAngle"
}
由于您要比较的事物之一绝对是非数字的,因此,虽然
eq
运算符是等效的,但您可以使用==
运算符。唯一的区别是,两个操作数都看起来像数字时,==
将它们比较为数字时(如有必要,将它们解析为数字)。这意味着"1" == "0x01"
尽管它们是完全不同的字符串。 eq
运算符总是比较为字符串。如何选择最好的?这实际上很容易:您是否认为比较两边都在处理数字?如果是,请使用
==
,否则请使用eq
。要在
expr
中使用if
,是一次动态选择操作符。确实不建议这样做,但是您可以这样做:set op "=="
if { [expr {$Node_3} $op {"BadAngle"} ]} {
return "BadAngle"
}
这很丑。 (请注意,我将其他所有内容放在大括号内以防止进行双重评估,并且我谨慎地正确平衡了所有方括号,这是使您陷入问题代码中的原因。)除非您这样做,否则请不要这样做。真的真的需要。
关于string - 当参数可以是列表或字符串时,TCL使用 “eq”或 “==”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17696432/