Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];

Вниз

Вариантные записи в ObjectPascal   Найти похожие ветки 

 
vidd   (2003-04-29 11:44) [0]

Подскажите, пожалста, как использовать вариантные записи.
Например

type
TMyRec = record
select AType: byte of
1: (A: integer);
2: (B: double);
3: (C: string);
end;

var
AVar: TMyRec;


И чего я теперь могу делать с AVar?


 
Skier   (2003-04-29 11:52) [1]

А такую запись компилятор пропускает ?

TMyRec = record
select AType: byte of
1: (A: integer);
2: (B: double);
3: (C: string);
end;


 
vidd   (2003-04-29 11:57) [2]

ну это я конечно перебрал...
пусть будэ:

type
TMyRec = record
case AType: byte of
1: (A: integer);
2: (B: double);
end;



 
Skier   (2003-04-29 12:01) [3]

В вариантных записях используется
общая память для вариантных частей.

Т.е.

var
AVar: TMyRec;
begin
AVar.AType := 1;
//работаем с полем AVar.A
AVar.AType := 2;
//работаем с полем AVar.B

end;



 
vidd   (2003-04-29 12:06) [4]

ага
значит надо таки указывать AType...
а я пытался сразу напрямую AVar присваивать значения
на что получал not enough actual parameters...
ну что-ж, спасибо за разьяснение


 
gg   (2003-04-29 12:17) [5]

Вы чего, надо работать не с AType, а непосредственно с A и B. т.е.
var
AVar: TMyRec;
begin
AVar.A := 1;
//работаем с полем AVar.A
AVar.B := 2;
//работаем с полем AVar.B

end;
точно также как и с обычной записью.

type
TMyRec = record
select AType: byte of
1: (A: integer);
2: (B: double);
3: (C: string);
end;

такое компилятор тоже поймет вполне нормально


 
Skier   (2003-04-29 12:23) [6]

>gg
Мда, батенька...


 
vidd   (2003-04-29 12:25) [7]

на string таки ругаецца:
[Error] vdRealFunc.pas(34): Type "String" needs finalization - not allowed in variant record


 
Skier   (2003-04-29 12:29) [8]

>vidd
если хочешь String в вариантных записях, то
1) используй ShortString
2) используй указатель на строку 3: (C: PString); , где
PString = ^String Но в этом случае внимательно следи на
выделением и освобождением памяти !


 
REA   (2003-04-29 12:30) [9]

А зачем циферки 1 2 3, если они не используются? Почему не 5 8 и 3112?


 
Smithson   (2003-04-29 12:32) [10]

Циферки любые могуть быть.
И все-таки без вских AType все прекрасно компилиться (Delphi 5).
Только что специально попробывал.


 
Anatoly Podgoretsky   (2003-04-29 13:04) [11]

REA © (29.04.03 12:30)
3112 нельзя



 
REA   (2003-04-29 14:58) [12]

Да понятно что нельзя, но непонятно зачем оно вообще?
Используются ведь для адресации только идентификаторы.
Может компилятору так легче или это чтобы пользователь сам не забыл зачем ему вариантная запись. Теряюсь в догадках.
В Си ведь просто union без всяких 1 2 3.


 
Anatoly Podgoretsky   (2003-04-29 15:00) [13]

Оно не нужно, но синтаксис такой, претензии Вирту


 
Skier   (2003-04-29 15:07) [14]

>Anatoly Podgoretsky
Хочу уточнить (для самообразования) : а в стандартном Паскале
Никлауса Вирта были вариантные записи ?


 
Внук   (2003-04-29 15:23) [15]

type
TMyRec = record
case AType: byte of
1: (A: integer);
2: (B: double);
end;
Здесь введено AType. Его можно (но необязательно) устанавливать, чтобы пользователь знал, что в данный конкретный момент дежит в вариантной части.
if AVar.AType=1 then //работаем с Ineteger иначе с Double
Когда это несущественно, можно имя тэга опустить:
TMyRec = record
case byte of
1: (A: integer);
2: (B: double);
end;
Здесь нельзя определить, что же сейчас лежит в вариантной части AVar.


 
Calm   (2003-04-29 17:10) [16]


> Хочу уточнить (для самообразования) : а в стандартном Паскале
> Никлауса Вирта были вариантные записи ?

Конечно нет. В стандартном паскале вообще мало чего было.
Borland Pascal отличается от изначального паскаля Вирта, как BP от Delphi6 (с D7 не работал, не знаю :)).


 
Skier   (2003-04-29 17:14) [17]

>Calm

> Конечно нет. В стандартном паскале вообще мало чего было.

Я это предполагал...


 
Anatoly Podgoretsky   (2003-04-29 17:45) [18]

Skier © (29.04.03 15:07)
Не помню, но если не были, то претензии к обскураторам



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
1-34473
Ncm
2003-04-29 07:49
2003.05.12
сортировка Excel


3-34375
Jaxtor
2003-04-21 12:26
2003.05.12
Кэшированные изменения


1-34454
Dmitry S.
2003-04-28 08:45
2003.05.12
Flat


14-34602
Карелин Артем
2003-04-24 13:33
2003.05.12
Уровень излучения сотового телефона.


1-34422
saty
2003-04-28 16:08
2003.05.12
файл с записями





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский