Tim*_*ram 1 delphi if-statement set
我有一组字符,我在TYPE部分中定义为:
TAmpls = set of '1'..'9'';
Run Code Online (Sandbox Code Playgroud)
在我的函数中,我在var部分中声明了一个新变量,类型为Tampls:
myAmpls : Tampls;
Run Code Online (Sandbox Code Playgroud)
然后,我使用以下命令取消分配myAmpls中的所有内容:
myAMpls := [];
Run Code Online (Sandbox Code Playgroud)
然后我找到一个整数(我称之为n).如果我的set变量中没有分配这个数字,我想分配它,为此我尝试使用:
if not chr(n) in myAmpls then include(myAmpls,chr(n));
Run Code Online (Sandbox Code Playgroud)
但编译器抛出错误说:
'Operator not applicable to this operand type'
Run Code Online (Sandbox Code Playgroud)
如果我删除'not',代码编译得很好,为什么会这样?
我原以为n是否已经在myAmpls中是布尔值,为什么我不能使用'not'?
Delphi运算符优先级在文档中有详细说明.在那里,您将找到列出其优先级的运算符表.我不会在这里重现这个表格,不仅仅是因为它很难在降价中展示!
你也会发现这个文字:
优先级较高的运算符在优先级较低的运算符之前进行求值,而优先级相同的运算符在左侧关联.
你的表达是:
not chr(n) in myAmpls
Run Code Online (Sandbox Code Playgroud)
现在,not优先级高于in.这意味着not首先评估.所以表达式被解析为
(not chr(n)) in myAmpls
Run Code Online (Sandbox Code Playgroud)
这是一个语法错误,因为not不能与字符操作数一起使用.你需要应用parens来为你的表达提供所需的含义:
not (chr(n) in myAmpls)
Run Code Online (Sandbox Code Playgroud)