使用三元运算符的TCL条件命令

时间:2016-03-13 02:18:01

标签: tcl ternary-operator

是否可以使用TCL的三元运算符运行条件命令?

使用if语句

   if {[string index $cVals $index]} {
       incr As
    } {
       incr Bs
    }

我想使用三元运算符如下,但是我收到错误

  执行“[string index $ cVals $ index]时

无效的命令名”1“   ? incr As:incr Bs“

[string index $cVals $index] ? incr As : incr Bs

1 个答案:

答案 0 :(得分:4)

对于三元条件,我们应该只使用布尔值,0或1.

因此,您无法直接使用string index,因为它将返回char或空字符串。您必须比较字符串是否为空。

另外,对于条件的通过/失败标准,我们必须给出文字值。您应该使用expr来评估表达式。

一个基本的例子可以是,

% expr { 0 < 1 ? "PASS" : "FAIL" }
PASS
% expr { 0 > 1 ? "PASS" : "FAIL" }
FAIL
%

请注意,我使用双引号作为字符串,因为它有字母表。在数字的情况下,它不必是双引号。 Tcl会恰当地解释数字。

% expr { 0 > 1 ? 100 : -200 }
-200
% expr { 0 < 1 ? 100 : -200 }
100
%

现在,您的问题可以做些什么?

如果要使用任何命令(例如incr),则应在方括号内使用,以将其标记为命令。

% set cVals "Stackoverflow"
Stackoverflow
% set index 5
5
% # Index char found. So, the string is not empty.
% # Thus, the variable 'As' is created and updated with value 1
% # That is why we are getting '1' as a result. 
% # Try running multiple times, you will get the updated values of 'As'
% expr {[string index $cVals $index] ne {} ? [incr As] : [incr Bs] }
1
% info exists As
1
% set As
1
% # Note that 'Bs' is not created yet...
% info exists Bs
0
%
% # Changing the index now... 
% set index 100
100
% # Since the index is not available, we will get empty string. 
% # So, our condition fails, thus, it will be increment 'Bs'
% expr {[string index $cVals $index] ne {} ? [incr As] : [incr Bs] }
1
% info exists Bs
1
%