OberonCore https://forum.oberoncore.ru/ |
|
нормально ли, что можно объект1^ := объект2^ ? https://forum.oberoncore.ru/viewtopic.php?f=22&t=6774 |
Страница 1 из 1 |
Автор: | budden [ Понедельник, 21 Июнь, 2021 20:41 ] |
Заголовок сообщения: | нормально ли, что можно объект1^ := объект2^ ? |
Примерно так: Цитата: TYPE o = OBJECT ... END; VAR o1, o2 : o; BEGIN o1^ := o2^ END. По смыслу всё содержимое объекта (включая все частные поля) копируется из o2 в о1. Хотя я делал это в методе o, может быть, вне методов o такое не скомпилируется - просто не пробовал. Это фича или баг? Я не поручусь, что прямо все поля так присваиваются, но некоторые точно присваиваются |
Автор: | Trurl [ Понедельник, 21 Июнь, 2021 22:00 ] |
Заголовок сообщения: | Re: нормально ли, что можно объект1^ := объект2^ ? |
А почему это может быть багом? |
Автор: | budden [ Понедельник, 21 Июнь, 2021 22:36 ] |
Заголовок сообщения: | Re: нормально ли, что можно объект1^ := объект2^ ? |
Вот более содержательный пример: Код: MODULE DefO; VAR schjotchik : SIZE; TYPE o* = OBJECT VAR f* : SIZE; skrytoePole- : SIZE; PROCEDURE &new_o*(); BEGIN skrytoePole := schjotchik; INC(schjotchik) END new_o; END o; END DefO. Код: MODULE Primer; IMPORT DefO; VAR o1, o2 : DefO.o; PROCEDURE Do*(); BEGIN NEW(o1); NEW(o2); ASSERT(o1.skrytoePole # o2.skrytoePole); o2.f := 7; o1^ := o2^; TRACE(o1.skrytoePole = o2.skrytoePole); END Do; END Primer. Primer.Do ~ Печатает Код: {P cpuid= 0, pid= 8848 Primer.Do@159:(o1^.skrytoePole = o2^.skrytoePole)= TRUE; } Протекла инкапсуляция, единственное, поле надо было назвать не „скрытым“, а „защищённым“. |
Автор: | Александр Ильин [ Вторник, 22 Июнь, 2021 02:02 ] |
Заголовок сообщения: | Re: нормально ли, что можно объект1^ := объект2^ ? |
budden писал(а): Протекла инкапсуляция Ну, как бы с одной стороны вроде бы протекла, а с другой стороны вы просто склонировали объект и теперь у вас его две копии. Это надо просто иметь в виду как особенность системы - любой системы, где есть SYSTEM.MOVE, в общем-то. Так что уникальные идентификаторы должны быть основаны на указателях (каждый из которых как раз и является уникальным значением), а не на простых полях, чтобы в конечном итоге только сборщик мусора ими управлял.В КП для таких случаев я публиковал только абстрактный класс и фабрику, а уникальное содержимое делал в расширенном типе, который не опубликован. Тогда такой трюк становится недоступен. |
Автор: | Sergej Durmanov [ Вторник, 22 Июнь, 2021 05:19 ] |
Заголовок сообщения: | Re: нормально ли, что можно объект1^ := объект2^ ? |
OBJECT - синтаксический сахар над POINTER TO RECORD. |
Автор: | budden [ Вторник, 22 Июнь, 2021 11:41 ] |
Заголовок сообщения: | Re: нормально ли, что можно объект1^ := объект2^ ? |
Спасибо, всё понял! А можно ли у указателя сделать "тело"? |
Автор: | Wlad [ Вторник, 22 Июнь, 2021 13:18 ] |
Заголовок сообщения: | Re: нормально ли, что можно объект1^ := объект2^ ? |
budden писал(а): Спасибо, всё понял! А можно ли у указателя сделать "тело"? В смысле "тело указателя"? "Тело указателя" может быть либо просто адресом, либо двумя адресами (метод и экземпляр/"контекст") Вас - что интересует? Получение информации, на "какую сущность (какого типа) он сейчас указывает"? Или ещё какую-то "служебную информацию" получать хотите? |
Автор: | Sergej Durmanov [ Вторник, 22 Июнь, 2021 15:18 ] |
Заголовок сообщения: | Re: нормально ли, что можно объект1^ := объект2^ ? |
budden писал(а): Спасибо, всё понял! А можно ли у указателя сделать "тело"? В первоначальномой версии языка, в которой не было OBJECT, так и было. Сейчас для этого есть объект.
|
Автор: | budden [ Вторник, 22 Июнь, 2021 19:50 ] |
Заголовок сообщения: | Re: нормально ли, что можно объект1^ := объект2^ ? |
Сергей меня понял. Имелся в виду безымянный составной оператор, который выполняется автоматически. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |