IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Дискриминантные записи - GNAT, (разделено)
сообщение
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +



procedure Test is

type test(d: integer := 0) is record
case d is
when 0 => f1: integer;
when others => f2: integer;
end case;
end record;

t1, t2, t3: aliased test;
b: boolean;

function set(t: access test) return boolean is
begin
t.all := t1; -- raised CONSTRAINT_ERROR : test.adb:24 discriminant check failed
return true;
end;

begin
t1 := (d=>0, f1=>0);
t2 := (d=>1, f2=>1);
t3 := (d=>1, f2=>1);
t2 := t1; -- тут всё нормально отрабатывает
b := set(t3'access);
end Test;



И что делать с этим
raised CONSTRAINT_ERROR : test.adb:24 discriminant check failed
?

В процедуре через out-параметр присвоилось нормально, однако.
А вот t3'access.all := t1'access.all; - ошибка дискриминанта

Почему прямо присваивать можно, а через указатель - нельзя? Так и написано в стандарте?

Если поставить точку останова, а потом добить пустых строчек так, чтобы эта точка оказалась на строчке, на которой ничего нет, а потом отрубить отладчик, пересобрать код, перезапустить отладчик, то эту точку останова уже не убрать.

Дизассмеблер не взлетел: Couldn't get assembly code.

Кстати, смысла на ограничения параметров в функциях нет никакого. Избавление от побочных эффектов? Ха, толку, если можно писать во внешние переменные. Зато костыль с access получится на славу по уродливости.
Зачем вообще языки Паскалевого семейства делают ненужное разделение на процедуры и функции? Да, концепция красивая, типа процедура - то, что выполняется, функция - то, что возвращает значение, но в условиях реальности она только мешает.

Сообщение отредактировано: TarasBer -


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
TarasBer   Дискриминантные записи - GNAT   31.01.2011 19:09
volvo   Думать, прежде, чем писать такие вещи. Ибо компиля…   31.01.2011 21:24
TarasBer   > Компилятор сначала проверит, а имеешь ли ты п…   31.01.2011 22:11
volvo   Значит, тебе не нужна Ада. Используй С и действуй …   1.02.2011 0:13
-TarasBer-   Мне всего-то надо создать в куче сущность с дискри…   1.02.2011 0:49
volvo   Я сказал на операцию присваивания, а не на операци…   1.02.2011 17:28
TarasBer   > Затем, чтобы контролировать, имеешь ли ты в д…   1.02.2011 18:15
volvo   Пожалуйста. Только тебе это не поможет - ты все ра…   2.02.2011 16:35
TarasBer   > Либо отказаться от использования discriminant…   2.02.2011 17:03
volvo   В Стандарте? Где именно, можно уточнить? Ибо это н…   2.02.2011 21:05
TarasBer   > В Стандарте? Где именно, можно уточнить? Ибо …   3.02.2011 17:33
volvo   Оно уже сейчас есть в языке. Но только в А2005, а …   3.02.2011 18:58
TarasBer   > С точки зрения компилятора эти 2 типа записи …   3.02.2011 19:22
volvo   Я не про Модулу в данном случае. Я про тот проект,…   3.02.2011 21:52
-TarasBer-   > Я не про Модулу в данном случае. Я про тот пр…   3.02.2011 23:48
volvo   Не знаю, было ли у того проекта отдельное название…   4.02.2011 0:55
-TarasBer-   > Но Вирт продвигал там идеи Алгол-W Почитал в…   4.02.2011 1:19
volvo   Что именно ты пробовал сделать, можно посмотреть? …   4.02.2011 1:38
TarasBer   Ну классический пример (из http://8vmr.livejournal…   4.02.2011 14:35
volvo   Стоп. Ада такого не позволит по одной простой прич…   4.02.2011 17:30
TarasBer   > Только у меня возникает вопрос: а почему надо…   4.02.2011 17:39
volvo   Лямбды нужны там, где нет замыканий. В С++ их нет …   4.02.2011 18:15


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.04.2024 8:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name