camilost napisał(a)
Dziwne, bo wiem i próbowałem ;/ Sprawdź sobie sam ;x A w Kompedium nic nie ma nt. if ... in ;x
No i sprawdziłem i działa tak, jak napisałem w poprzednim poście, tyle że warunek z in musi być w nawiasie; Poza tym, w kompendium jest napisane w jaki sposób sprawdzić czy wartość istnieje w zbiorze, czy nie - trzeba mieć książkę, ja mam, więc podyktuję Ci:
Zaprzeczanie
Możesz zapytać: "co stanie się, gdy chcemy sprawdzić, czy dany element nie należy do zrioru?". W takim wypadku nie możemy zamiast operatora in
wstawić out
, ale możliwe jest zastosowanie operatora not
, który jest zaprzeczeniem (o operatorach pisałem nieco wyżej).
if not (tcFiat in Cars) then {czynności}
Jeżeli element tcFiat
nie należy do zbioru Cars
, warunek zostanie spełniony.</dfn>
Z racji tej, że nie znam Twojej funkcji GetWinVersion
nie mogę określić, co zwraca ta funkcja;
Dlatego:
- jeśli zwraca wartość zbioru, to musisz sprawdzić czy ta wartość jest w podanym przez Ciebie zbiorze,
- jeśli zwraca zbiór, to musisz sprawdzić czy podana przez Ciebie wartość jest w zwróconym przez funkcję zbiorze;
Możesz to sprawdzić tak:
program NotOperandMyth;
{$APPTYPE CONSOLE}
type
TWord = (wsDelphi, wsPascal, wsLazarus);
type
TWordsSet = set of TWord;
function GetWords(): TWordsSet;
begin
Result := [wsDelphi, wsLazarus];
end;
function GetPascalWord(): TWord;
begin
Result := wsPascal;
end;
begin
if not (wsPascal in GetWords) then
WriteLn('Wartosc "wsPascal" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!');
if not (wsDelphi in GetWords) then
WriteLn('Wartosc "wsDelphi" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!');
if not (GetPascalWord in [wsDelphi, wsLazarus]) then
WriteLn('Wartosc "wsPascal" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!');
if not (GetPascalWord in [wsPascal]) then
WriteLn('Wartosc "wsPascal" nie wystepuje w zbiorze "[wsPascal]"!');
ReadLn;
end.
Czy dostałeś kiedykolwiek na wyjściu taką linię:
Wartosc "wsDelphi" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!
lub taką:
Wartosc "wsPascal" nie wystepuje w zbiorze "[wsPascal]"!
???
Bo ja zawsze dostaje takie linie:
Wartosc "wsPascal" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!
Wartosc "wsPascal" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!
Więc jak widać można negować za pomocą tego operatora;
Fakt, źle napisałem w poprzednim poście, ale tylko dlatego, że nie zapoznałem się w Twoją funkcją GetWinVersion
; W każdym razie polecam zrobić sobie powtórkę ze zbiorów;