Can';在delphi中,如果不使用集合,则不使用

Can';在delphi中,如果不使用集合,则不使用,delphi,if-statement,set,Delphi,If Statement,Set,我有一组字符,我在类型部分中定义为: TAmpls = set of '1'..'9''; 在我的函数中,我在var部分声明了一个新变量,类型为Tampls,使用: myAmpls : Tampls; myAMpls := []; 然后,我使用以下方法取消分配myAmpls中的所有内容: myAmpls : Tampls; myAMpls := []; 然后我找到一个整数(我称之为n)。如果未在我的set变量中分配此编号,我希望分配它,为此我尝试使用: if not chr(n) in

我有一组字符,我在类型部分中定义为:

TAmpls = set of '1'..'9'';
在我的函数中,我在var部分声明了一个新变量,类型为Tampls,使用:

myAmpls : Tampls;
myAMpls := [];
然后,我使用以下方法取消分配myAmpls中的所有内容:

myAmpls : Tampls;
myAMpls := [];
然后我找到一个整数(我称之为n)。如果未在我的set变量中分配此编号,我希望分配它,为此我尝试使用:

if not chr(n) in myAmpls then include(myAmpls,chr(n));
但是编译器抛出一个错误,说明:

'Operator not applicable to this operand type'
如果我删除了“not”,代码可以编译,为什么会这样


我本以为n是否已经在myAmpls中是布尔值,所以为什么我不能使用“not”

Delphi运算符优先级在中有详细说明。在那个里你们会发现一个列有优先顺序的运算符表。我不会在这里复制这个表,尤其是因为它很难以降价的方式展示

您还可以找到以下文本:

优先级较高的运算符在优先级较低的运算符之前求值,而优先级相等的运算符则关联到左侧

你的表达是:

not chr(n) in myAmpls
现在,
not
的优先级高于
中的
。这意味着首先计算
而不是
。因此表达式被解析为

(not chr(n)) in myAmpls
这是一个语法错误,因为
not
不能与字符操作数一起使用。您需要应用parens为您的表达式赋予所需的含义:

not (chr(n) in myAmpls)

Delphi运算符优先级在中有详细说明。在那个里你们会发现一个列有优先顺序的运算符表。我不会在这里复制这个表,尤其是因为它很难以降价的方式展示

您还可以找到以下文本:

优先级较高的运算符在优先级较低的运算符之前求值,而优先级相等的运算符则关联到左侧

你的表达是:

not chr(n) in myAmpls
现在,
not
的优先级高于
中的
。这意味着首先计算
而不是
。因此表达式被解析为

(not chr(n)) in myAmpls
这是一个语法错误,因为
not
不能与字符操作数一起使用。您需要应用parens为您的表达式赋予所需的含义:

not (chr(n) in myAmpls)

运算符优先级-您需要在“myAmpls中的chr(n)”周围使用括号,谢谢。运算符优先级-您需要在“myAmpls中的chr(n)”周围使用括号,谢谢。如果编译器发出的“Operator”not“不适用于“Char”类型,那就太好了。唉。还有一件事是为了费心解释(一些机器人反对我用“+1”开头评论“可能会分散作者的注意力”,嘿,好)。@MartynA谢谢。嗯,页面顶部的绿色+10指示足够分散注意力了吧@UliGerhardt是的,这将是一个改进,而且如果编译器发出“operator”not“not application to“Char”type”,那么编译器肯定知道它在哪个操作符上卡住了。唉。还有一件事是为了费心解释(一些机器人反对我用“+1”开头评论“可能会分散作者的注意力”,嘿,好)。@MartynA谢谢。嗯,页面顶部的绿色+10指示足够分散注意力了吧@UliGerhardt是的,这将是一个改进,而且编译器肯定知道它使用了哪个操作符