Создание записи Ada с одним полем - PullRequest
6 голосов
/ 30 апреля 2010

Я определил тип:

type Foo is record
   bar : Positive;
end record;

Я хочу создать функцию, которая возвращает экземпляр записи:

function get_foo return Foo is
    return (1);
end get_foo;

Но Ада не разрешит мне сказать, что "у позиционного агрегата не может быть одного аргумента".
Тупо пытаясь, я добавил в запись еще одно тупое поле, и тогда return (1, DOESNT_MATTER); работает!

Как мне сказать Аде, что это не позиционный агрегат, а попытка создать запись?

1 Ответ

7 голосов
/ 30 апреля 2010

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

Значения типа записи указываются путем предоставления списка именованных полей. Правильный код для вашей функции get_foo должен быть следующим:

function get_foo return Foo is
    return (bar => 1);
end get_foo;

Вы также можете указать тип записи, используя выражение Foo'(bar => 1).

Использование списка именованных компонентов на практике лучше, чем позиционная инициализация. Вы можете забыть положение компонента, и оно не изменится, если вы добавите новое поле в вашу запись.

...