> -- AlexBogy писал(а):
> Почему для проверки по типу записи необходимо делать процедуру с параметрами VAR или IN ?Не совсем так, такой необходимости нет. Дело в другом - в языке была сделана попытка сделать недопустимыми бессмысленные проверки, которые всегда имеют одно и то же значение. В большинстве случаев для записей проверка имеет смысл только для ссылок, поставляющие данные извне, которые неявным образом задаются VAR и IN -параметрами. Отсутствие возможности проверки типа для разыменованного указателя - это побочный эффект такого ограничения и его можно считать упущением языка, так как здесь она тоже осмысленна. Это некритично, так как в таких случаях всегда можно проверить тип по указателю, не прибегая к разыменованию, хотя и может потребоваться объявить именованный указатель на соответствующую запись, если он не был предоставлен с самого начала.

## Код:
```
MODULE TestExt; IMPORT Log;
TYPE
  bas=EXTENSIBLE RECORD a:INTEGER  END;
  ras=RECORD(bas) b:REAL; END;
VAR 
  a:POINTER TO bas; b:POINTER TO ras;

PROCEDURE Go*;
TYPE pras = POINTER TO ras;(* Нужен исключительно для проверки IS *)
BEGIN
  NEW(b);
  a:=b;
  IF a IS pras THEN
    Log.String("a^ is ras"); Log.Ln
  END
END Go;

END TestExt.
```


Это, скорее, для разделаПочему в Обероне сделано так?