不能使用非数字字符串作为“&”的操作数在TCL

时间:2014-01-25 12:44:41

标签: tcl

if {   ($name1 == "john")   &   ($name2 == "smith")  } { puts "hello world" }

i got  error:can't use non-numeric string as operand of "&"

我试过了:

if {   $name1 == "john"   &   $name2 == "smith"  } { puts "hello world" }
if {   {$name1 == "john"}   &   {$name2 == "smith"}  } { puts "hello world" }

我想做什么?

1 个答案:

答案 0 :(得分:6)

Tcl中的expr命令允许两种形式的AND操作:按位(使用运算符&)和逻辑(使用运算符&&)。按位运算符仅允许整数操作数:逻辑运算符可以处理布尔值和数值(整数和浮点值; 0或0.0在这种情况下表示为假)操作数。除非您特别想使用位模式,否则请使用逻辑AND运算符。

这样的表达式
$foo eq "abc" && $bar eq "def"

有效,因为eq运算符计算为布尔值(BTW:如果要进行字符串相等比较,则更喜欢新的eq(等于)运算符到==,因为它更高效),使&&留下两个布尔操作数。

以下代码

{$foo eq "abc"} && {$bar eq "def"}

失败,因为大括号会阻止替换并强制&&处理两个字符串操作数。在这种情况下,&&运算符会给出错误消息

expected boolean value but got "$foo eq "abc""

并且&运算符提供消息

can't use non-numeric string as operand of "&"

这就是你得到的。