2014-01-25 45 views
2
if { ($name1 == "john") & ($name2 == "smith") } { puts "hello world" } 

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

我有嘗試:不能使用非數字字符串的操作數「和」在TCL

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

是我該做的?

+1

這段代碼適用於我(除了第三個變體,它提供了錯誤信息),但您可能想使用&&(邏輯和)而不是'&'(按位和)。 –

回答

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 "&" 

這是你得到了什麼。

相關問題