Разъясните конструкцию "J in [x1,x2,x3]"

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Разъясните конструкцию "J in [x1,x2,x3]"

Сообщение dunin » 26.07.2011 15:51:11

Обнаружил новую для себя вещь... разъясните пожалуйста теорию...

Так не работает
Код: Выделить всё
const
  ID_CONFIG    = -99;
  ID_SUBSYSTEM = -98;
  ID_CATALOGS  = -97;
  ID_SQL       = -96;
...
var j: integer;
...
j:= -97

if (j in [ID_CONFIG, ID_SUBSYSTEM, ID_CATALOGS, ID_SQL]) then // не работает... False


А так работает
Код: Выделить всё
...
if (abs(j) in [abs(ID_CONFIG), abs(ID_SUBSYSTEM), abs(ID_CATALOGS), abs(ID_SQL)]) then //работает, т.е. True


И так тоже работает
Код: Выделить всё
...
  if (
  (j = ID_CONFIG) or
  (j = ID_SUBSYSTEM) or
  (j = ID_CATALOGS) or
  (j = ID_SQL)
    ) then //работает, т.е. true


Почему в первом случае возвращается False??? :|
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Разъясните конструкцию "J in [x1,x2,x3]"

Сообщение vada » 26.07.2011 16:50:34

Да просто все.
Код: Выделить всё
if (j in [ID_CONFIG, ID_SUBSYSTEM, ID_CATALOGS, ID_SQL]) then // не работает... False

Не работает т.к. J является Integer а [...] является Set. Разные типы, типа. При сравнении приводится к одному типу Set, ибо, in можно применять только к Set. Вощем, не попадает Byte(-97) в интервал от 0 до 3 поэтому и False.
Во втором и третьем случае все приводится к типу Integer. Поэтому получаем TRUE.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Разъясните конструкцию "J in [x1,x2,x3]"

Сообщение Brainenjii » 26.07.2011 17:03:50

Насколько я знаю, конструкция [...] - это Set of Byte... Вот такое -
Код: Выделить всё
const
  ID_CONFIG = -99;
  ID_SUBSYSTEM = -98;
  ID_CATALOGS = -97;
  ID_SQL = -96;

var j: integer;

begin
  j:= -97;
  If (Byte(j) in [ID_CONFIG, ID_SUBSYSTEM, ID_CATALOGS, ID_SQL]) Then
    WriteLn('Yahoo');
end. 

Работать будет но со всеми вытекающими из преобразования Integer в Byte
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Разъясните конструкцию "J in [x1,x2,x3]"

Сообщение dunin » 26.07.2011 17:36:45

vada писал(а):... а [...] является Set....

Brainenjii писал(а):...конструкция [...] - это Set of Byte...

Мдя.... как все очевидно...
Спасибо, и простите, что отнял время, :oops: жара, понимаете ли...
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru