2014-12-05 29 views
1

IF NOT使用了一組我有一組我在TYPE部分定義爲char型:不能在delphi

TAmpls = set of '1'..'9''; 

在我的功能,我宣佈一個新的變量,在var部分,使用類型Tampls:

myAmpls : Tampls; 

我然後使用未分配的myAmpls一切:

myAMpls := []; 

然後我找到一個整數(我會打電話給它n)。如果這個數字是不是在我的組可變分配,我想賦給它,爲了這個,我已經嘗試使用:

if not chr(n) in myAmpls then include(myAmpls,chr(n)); 

但是編譯器會引發錯誤說:

'Operator not applicable to this operand type' 

如果我刪除'不',代碼編譯好,爲什麼這樣?

我以爲n是否已經在myAmpls中是布爾型的,那爲什麼我不能用'not'?

+2

運算符優先級 - 你需要的括號 – MartynA 2014-12-05 17:16:10

+0

王牌「在myAmpls CHR(N)」,謝謝。 :) – 2014-12-05 17:16:45

+0

工作就像一個魅力,謝謝。 – 2014-12-05 17:17:25

回答

6

德爾福運算符優先級詳見documentation。在那裏你會找到一個列出它們優先級的運算符表。我不會在這裏複製表格,至少是因爲它很難在降價時進行佈局!

你還會發現這樣的文字:

具有更高優先級的運營商以較低的優先級操作之前進行評估,而相同的優先級聯想到左邊的運營商。

您的表達式爲:

not chr(n) in myAmpls 

現在,notin更高的優先級。這意味着not首先被評估。所以表達式解析爲

(not chr(n)) in myAmpls 

這是一個語法錯誤,因爲not不能以字符操作使用。您需要申請括號,得到所需的意義表達式:

not (chr(n) in myAmpls) 
+2

如果編譯器發出「運算符」而不是「不適用於」字符「類型」,那會很好。嘆。 – 2014-12-05 17:34:21

+1

加上一個麻煩解釋(一些bot反對說,「我可能會分散注意力的作者」,用「+1」開始評論,嘿嘿)。 – MartynA 2014-12-05 17:36:36

+0

@MartynA謝謝。那麼,頁面頂部的小綠+10指示足以讓人分心呢? – 2014-12-05 17:37:29