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" }
我想做什么?
答案 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 "&"
这就是你得到的。