Tcl expr正在给出意外的结果

Tcl expr正在给出意外的结果,tcl,Tcl,expr为4个字符(t、n、f、y)提供意外结果。如果你在做进一步的计算。然后代码被破坏了。我不明白为什么会这样 % expr (F) F % expr (F)*1 can't use non-numeric string as operand of "*" 以及 下面是字符的文件:t,n,f,y。没有由这些字符命名的变量。它应该标记未找到变量或其他一些有效错误。我遗漏了什么吗?我想你是在期待expr出什么问题 该命令用于计算表达式。它可以对数字进行算术运算,比较字符串或数字,执行一些数学函

expr为4个字符(t、n、f、y)提供意外结果。如果你在做进一步的计算。然后代码被破坏了。我不明白为什么会这样

% expr (F)
F

% expr (F)*1
can't use non-numeric string as operand of "*"
以及


下面是字符的文件:t,n,f,y。没有由这些字符命名的变量。它应该标记未找到变量或其他一些有效错误。我遗漏了什么吗?

我想你是在期待
expr
出什么问题

该命令用于计算表达式。它可以对数字进行算术运算,比较字符串或数字,执行一些数学函数,等等

你的台词

% expr (F)
% expr (t)
% expr (n)
% expr (f)
% expr (y)
它们都做同样的事情:它们要求对优先级更高的文本字符串(大括号)执行no操作。所以没有其他内容,
expr
返回字符串本身

但是,您正在尝试将字符串乘以数字:这是一个未定义的操作。实际上,
expr
给出了一个错误,指出
*
的一个操作数是非数字字符串(哪个数字
F
应该表示?)

使用诸如
F
y
之类的文本字符串,您可以要求进行字符串比较。例如,您可以执行以下操作:

% expr F < f
1
等等


因此,
expr
并没有产生任何意外的结果,但可能您的期望是错误的。

我认为您对
expr
的期望是错误的

The [expr] conditions of commands such as [if] and [while] expect the expression to evaluate to a boolean, i.e., an integer or one of the following string values:

    true, on, yes
    false, off, no
该命令用于计算表达式。它可以对数字进行算术运算,比较字符串或数字,执行一些数学函数,等等

你的台词

% expr (F)
% expr (t)
% expr (n)
% expr (f)
% expr (y)
它们都做同样的事情:它们要求对优先级更高的文本字符串(大括号)执行no操作。所以没有其他内容,
expr
返回字符串本身

但是,您正在尝试将字符串乘以数字:这是一个未定义的操作。实际上,
expr
给出了一个错误,指出
*
的一个操作数是非数字字符串(哪个数字
F
应该表示?)

使用诸如
F
y
之类的文本字符串,您可以要求进行字符串比较。例如,您可以执行以下操作:

% expr F < f
1
等等

因此,
expr
不会产生任何意外的结果,但可能您的期望是错误的

The [expr] conditions of commands such as [if] and [while] expect the expression to evaluate to a boolean, i.e., an integer or one of the following string values:

    true, on, yes
    false, off, no
我相信t,y,f和n是这些的捷径


我相信t、y、f和n是实现这些目标的捷径。

您使用的是哪个版本的TCL?TCL 8.5版Linuk平台您使用的是哪个版本的TCL?TCL 8.5版Linuk平台您肯定是对的!我没有注意到使用其他字符串会产生错误。实际上,
expr f?5:7
给出7,而
expr y?5:7
给出5个唯一的布尔文字前缀。(我可能是那个输入代码的人,但有时结果可能出乎意料!)你肯定是对的!我没有注意到使用其他字符串会产生错误。实际上,
expr f?5:7
给出7,而
expr y?5:7
给出5个唯一的布尔文字前缀。(可能是我把代码放进去的,但有时结果会出乎意料!)