Где оцениваются параметры по умолчанию в Аде? - PullRequest
1 голос
/ 02 мая 2019

Итак, мы знаем, что Ada поддерживает параметры по умолчанию, например,

procedure Example(param1 : Integer := 1);

Но мой вопрос: где оценивается параметр по умолчанию?На всех языках, где я знаком, параметр по умолчанию просто вставляется в вызывающий код, что требует последующей перекомпиляции, если параметр по умолчанию изменен.Использует ли Ада этот же подход?

Я попытался выполнить поиск в ARM 2012, но не смог найти «параметр по умолчанию» нигде во всем документе.Затем я проверил 6.4 и 6.4.1, где кажется, что ARM вызывает соответствующую часть «выражения по умолчанию».Однако «выражения по умолчанию» ссылаются на 3.7 дискриминантов.Это может быть использовано для уменьшения количества определений чего-либо, однако, если для двух понятий характерно то, что программисты должны делать, и определять это отдельно;этот переход сбивает с толку и выглядит как ошибка.

Примечание 59 гласит:

Выражение default_expect для дискриминанта типа оценивается, когда объект неограниченного подтипа типасоздал.

Ну, это не имеет никакого смысла в отношении вызовов подпрограмм.

Опять же, когда это "выражение по умолчанию" для подпрограммы на самом деле оценивается?

Ответы [ 2 ]

4 голосов
/ 02 мая 2019

Вы искали в правильном месте, но, должно быть, вы пропустили важную часть в RM 6.4 10/2 :

10/2 Для выполнения вызова подпрограммы, имя или префикс вызов оценивается, и каждый параметр (см. 6.4.1). Если используется выражение по умолчанию, неявное Параметр_ассоциация предполагается для этого правила. Эти оценки сделано в произвольном порядке.

2 голосов
/ 02 мая 2019

Я нашел его вскоре после публикации этого вопроса.

6.4.1 6.25 / 3 читает:

Для вызова любое выражение по умолчанию, которое рассматривается как часть вызова, считается частью вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...