Два раздела формальных параметров называются имеющими одинаковый профиль типа параметров тогда и только тогда, когда они имеют одинаковое число параметров, а в каждой позиции соответствующие параметры имеют один и тот же базовый тип. Подпрограмма или вход имеет одинаковый профиль типа параметров и результата с другой подпрограммой иливходом тогда и только тогда, когда оба имеют одинаковый профиль типа параметров, и либо оба являются функциями с одним и тем же базовым типом результата, либо оба функциями не являются.
Один и тот же идентификатор подпрограммы или знак операции может быть использован для нескольких спецификаций подпрограмм. В этом случае идентификатор или знак операции называется совмещенным; подпрограммы, которые имеют этот идентификатор или знак операции, тоже называются совмещенными и, следовательно, могут совмещаться друг с другом. Как поясняется в разд. 8.3, если две подпрограммы совмещаются друг с другом, то одна из них может скрыть другую, только если обе подпрограммы имеют одинаковый профиль типа параметров и результата[6] (см. 8.3, где описаны другие требования, необходимые для скрытия).
Вызов совмещенной подпрограммы неоднозначен (и поэтому неправилен), если ее имя, число сопоставлений параметров, типы и порядок фактических параметров, имена формальных параметров (при использовании именованных сопоставлений параметров) и тип результата (для функций) не позволяют идентифицировать единственную (совмещенную) спецификацию подпрограммы.
Примеры совмещенных подпрограмм:
procedure PUT(X : INTEGER»; procedure PUT(X : STRING); procedure SET(TINT : COLOR); procedure SET(SIGNAL : LIGHT);
Примеры вызовов:
PUT(28); PUT("no possibte ambiguity here");SET(TINT => RED»: SET(SIGNAL => RED); SET(COLOR'(RED));-- SET (RED) может быть неоднозначным, так как -- может обозначать значение типа COLOR и типа
Примечание. Понятие профиля типа параметров и результата не учитывает имен параметров, их видов и подтипов, а также присутствия или отсутствия выражений по умолчанию.
Неоднозначности могут (но не обязательно) также возникнуть, когда фактические параметры вызова совмещенной подпрограммы сами являются вызовами совмещенной функции, совмещенными литералами или агрегатами.
Неоднозначности могут (но не обязательно) также возникнуть, когда видимы несколько совмещенных подпрограмм, принадлежащих различным пакетам. Этих неоднозначностей можно избежать несколькими способами: использовать квалифицированные выражения для некоторых или для всех фактических параметров и результата, если он есть; имя такой подпрограммы можно задавать более точно расширенным именем; наконец, такая подпрограмма может быть переименована.
Ссылки: агрегат 4.3, базовый тип 3.3, вид 6.1, вход 9.5, вызов функции 6.4, выражение по умолчанию для формального параметра 6.1, знак операции 6.1, идентификатор 2.3, именованное сопоставление параметров 6.4, квалифицированное выражение 4.7, литерал 4.2, неправильный 1.6, описание переименования 8.5, пакет 7, параметр подпрограммы 6.2, подпрограмма 6, подтип 3.3, подтип результата 6.1, скрытие 8.3, совмещение 8.7, спецификация подпрограммы 6.1, тип 3.3, фактический параметр 6.4.1, формальный параметр 6.1, функция 6.5.