![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
И что делать с этим raised CONSTRAINT_ERROR : test.adb:24 discriminant check failed ? В процедуре через out-параметр присвоилось нормально, однако. А вот t3'access.all := t1'access.all; - ошибка дискриминанта Почему прямо присваивать можно, а через указатель - нельзя? Так и написано в стандарте? Если поставить точку останова, а потом добить пустых строчек так, чтобы эта точка оказалась на строчке, на которой ничего нет, а потом отрубить отладчик, пересобрать код, перезапустить отладчик, то эту точку останова уже не убрать. Дизассмеблер не взлетел: Couldn't get assembly code. Кстати, смысла на ограничения параметров в функциях нет никакого. Избавление от побочных эффектов? Ха, толку, если можно писать во внешние переменные. Зато костыль с access получится на славу по уродливости. Зачем вообще языки Паскалевого семейства делают ненужное разделение на процедуры и функции? Да, концепция красивая, типа процедура - то, что выполняется, функция - то, что возвращает значение, но в условиях реальности она только мешает. Сообщение отредактировано: TarasBer - 31.01.2011 15:11 -------------------- |
![]() ![]() |
TarasBer |
![]()
Сообщение
#2
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> Затем, чтобы контролировать, имеешь ли ты в данный конкретный момент (для установленного дискриминанта) обращаться к данному конкретному полю, или нет.
Правильно, мне это как раз даже нужно, мне этого реально не хватало в Дельфи. > b := (d => 0, f1 => 1); -- Это - нет А если я не знаю (на этапе компиляции), какое именно d мне понадобится?
Нет, спасибо. > Как думаешь, что будет выведено на экран? Не запуская программу попробуй ответить... t2.f2 и t2.f3 не должны вывестись вообще, но если заставить, то будет Код 1 1 2 1 Во второй строке 1, а не 2, потому что его затёрло поле f1, находящееся по этому же адресу. (я угадал? Программу не запускал) Не вижу в этом примере ничего опасного. Программа должна срезаться при попытке вывести t2.f2 и t2.f3. А в присваивании нет ничего такого. t2.f1 будет честно равно единице. > ты должен при помощи агрегата установить новый дискриминант и ВСЕ соответствующие ему поля. А если я не знаю новое значение дискриминанта на этапе компиляции? Добавлено через 3 мин. Кстати, как сдвинуть выделенный текст вправо-влево (аналог ctrl+k+i, ctrl+k+u)? -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 4:44 |