Правила совместимости
Эквивалентность типов
Во многих случаях, например, для большинства бинарных операция или при переопределения методов, требуется эквивалентность типов.
Два типа Т1 и Т2 эквивалентны, если выполняется одно из условий:
- типы
Т1иТ2это один и тот же тип, возможно, переименованный, так как переименование типа не создает новый тип - типы
Т1иТ2это типы векторов и типы их элементов эквивалентны - типы
Т1иТ2этоможет бытьтипы и их базовые типы эквивалентны
Переименование типа не создает новый тип, таким образом, после описания:
тип Числа = Цел64
пусть ч: Число = 1
пусть ц: Цел64 = 2
пусть с: Слово64 = 3
типы переменных ч и ц эквивалентны, так как это один и тот же тип. В то же время, типы переменных с и ц не эквивалентны, так как это разные типы.
Совместимость по присваиванию
Совместимость по присваиванию используется в следующих случаях:
- инициализация констант и переменных с явным типом:
пусть х: Т = выражение, выражение должно быть совместимо с типомТ - оператор присваивания:
х := выражение - оператор
вернуть выражение, выражение должно быть совместимо с типом результата функции - передача фактических параметров при вызове:
Ф(аргумент1, ..., аргументN), аргумент должен быть совместим с типом параметра
Значение типа ТВ совместимо по присваиванию с целевым типом ТП (типом переменной, константы или параметра), если выполняется одно из условий:
ТПиТВэквивалентныТПэто целый тип (Байт,Цел64,Слово64), а значение - это литерал целого типа, причем значение литерала входит в допустимый диапазон значенийТПТПиТВэто типы векторов и типы их элементов эквивалентныТПэтомб Т1, а значение есть ‘пусто’ илиТПэтомб Т2и типыТ1иТ2эквивалентныТПиТВэто типы классов иТВявляется расширениемТП- переменная является полиморфным параметром
Добавить совместимость для протоколов и функциональных типов.