OberonCore https://forum.oberoncore.ru/ |
|
Расширенная совместимость массивов указателей по IN https://forum.oberoncore.ru/viewtopic.php?f=29&t=5908 |
Страница 1 из 1 |
Автор: | Илья Ермаков [ Среда, 05 Октябрь, 2016 06:17 ] |
Заголовок сообщения: | Расширенная совместимость массивов указателей по IN |
Случайно наткнулся на возможность передавать параметру IN arr: ARRAY OF BaseRecType фактический массив ARRAY OF ExtensionOf(BaseRecType). Как частный случай, IN arr: ARRAY OF ANYPTR может принимать массивы любых указателей на записи. В описании языка нигде не нашёл об этом. Примеры: Код: PROCEDURE Test*;
VAR arr: ARRAY 256 OF POINTER TO RECORD x: INTEGER END; PROCEDURE Proc (IN arr: ARRAY OF ANYPTR); BEGIN END Proc; BEGIN Proc(arr) END Test; PROCEDURE Test2*; TYPE T = POINTER TO EXTENSIBLE RECORD END; TEx = POINTER TO RECORD (T) END; VAR arr: ARRAY 256 OF TEx; PROCEDURE Proc (IN arr: ARRAY OF T); BEGIN END Proc; BEGIN Proc(arr) END Test2; |
Автор: | Info21 [ Среда, 05 Октябрь, 2016 08:31 ] |
Заголовок сообщения: | Re: Расширенная совместимость массивов указателей по IN |
Словесная формулировка неправильная. Разве в примере речь не об указателях? Что странного при такой работе с указателями? Правила совместимости в Сообщении есть (одно из приложений). Вы проверяли с пальцем по тексту? |
Автор: | Илья Ермаков [ Среда, 05 Октябрь, 2016 11:07 ] |
Заголовок сообщения: | Re: Расширенная совместимость массивов указателей по IN |
Ничего странного, это, в принципе, логично. (Очевидно, конечно, что это действует только для IN-параметров). Однако в описании этого всё же, видимо, нет. Вопросы совместимости параметров - открытых массивов регулируются вот этим: Цитата: Совместимость по массивам [Array compatible] Фактический параметр a типа Ta является совместимым по массивам с формальным параметром f типа Tf, если 1. Tf и Ta — эквивалентны, или 2. Tf — открытый массив, Ta — произвольный массив, и типы их элементов совместимы по массивам, или 3. Tf — открытый массив CHAR, и Ta имеет тип String, или 4. Tf — открытый массив SHORTCHAR, и Ta имеет тип Shortstring. Таким образом, либо массив многомерный - и уходим на 2, либо в итоге терминальное правило 1, где речь об эквивалентности. (3, 4 - не наш случай). |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |