关于 TCL 中条件语句的有趣行为
Interesting behavior about condition statement in TCL
这可能是个愚蠢的问题。但是我刚刚在TCL中发现了一件令人困惑的事情。
下面是示例代码。
set x test_string
if {$x==y} {
puts "Matching!"
} else {
puts "Not matching."
}
if {$x==z} {
puts "Matching!"
} else {
puts "Not matching."
}
当我 运行 这段代码时,它以以下错误结束。
invalid bareword "z"
in expression "$x==z";
should be "$z" or "{z}" or "z(...)" or ...
(parsing expression "$x==z")
invoked from within
"if {$x==z} {
puts "Matching!"
} else {
puts "Not matching."
}"
(file "test.tcl" line 3)
我知道当我们与字符串进行比较时,字符串应该被引用。所以下面的更有意义。
if {$x=="y"} {
puts "Matching!"
} else {
puts "Not matching."
}
if {$x=="z"} {
puts "Matching!"
} else {
puts "Not matching."
}
不过让我好奇的是,好像字符y不会导致这样的错误。
有人可以对此做一些解释吗?我不知道这里的 y 有什么特别之处。
谢谢!
因为布尔值不需要被引用。
% expr true
true
% expr false
false
% expr not_a_boolean
invalid bareword "not_a_boolean"
...
参见 Tcl_GetBoolean
手册页:
Tcl_GetBoolean expects src to specify a boolean value. If src is any of 0
, false
, no
, or off
, then Tcl_GetBoolean stores a zero value at *boolPtr. If src is any of 1
, true
, yes
, or on
, then 1 is stored at *boolPtr. Any of these values may be abbreviated, and upper-case spellings are also acceptable.
y
是yes
的明确缩写,一个true
值
这可能是个愚蠢的问题。但是我刚刚在TCL中发现了一件令人困惑的事情。
下面是示例代码。
set x test_string
if {$x==y} {
puts "Matching!"
} else {
puts "Not matching."
}
if {$x==z} {
puts "Matching!"
} else {
puts "Not matching."
}
当我 运行 这段代码时,它以以下错误结束。
invalid bareword "z"
in expression "$x==z";
should be "$z" or "{z}" or "z(...)" or ...
(parsing expression "$x==z")
invoked from within
"if {$x==z} {
puts "Matching!"
} else {
puts "Not matching."
}"
(file "test.tcl" line 3)
我知道当我们与字符串进行比较时,字符串应该被引用。所以下面的更有意义。
if {$x=="y"} {
puts "Matching!"
} else {
puts "Not matching."
}
if {$x=="z"} {
puts "Matching!"
} else {
puts "Not matching."
}
不过让我好奇的是,好像字符y不会导致这样的错误。
有人可以对此做一些解释吗?我不知道这里的 y 有什么特别之处。
谢谢!
因为布尔值不需要被引用。
% expr true
true
% expr false
false
% expr not_a_boolean
invalid bareword "not_a_boolean"
...
参见 Tcl_GetBoolean
手册页:
Tcl_GetBoolean expects src to specify a boolean value. If src is any of
0
,false
,no
, oroff
, then Tcl_GetBoolean stores a zero value at *boolPtr. If src is any of1
,true
,yes
, oron
, then 1 is stored at *boolPtr. Any of these values may be abbreviated, and upper-case spellings are also acceptable.
y
是yes
的明确缩写,一个true
值