Я имею, определяют тип:
type Foo is record
bar : Positive;
end record;
Я хочу создать функцию, которая возвращает экземпляр записи:
function get_foo return Foo is
return (1);
end get_foo;
Но Ada не позволит мне, говоря, что "позиционный агрегат не может иметь одного аргумента".
Глупо попытка, я добавил другое немое поле к записи, и затем return (1, DOESNT_MATTER);
работы!
Как я говорю Ada, что это не позиционный агрегат, а попытка создать запись?
Позиционная инициализация агрегата не может использоваться с записью, имеющей только один компонент, но это не значит, что вы не можете иметь запись с одним компонентом.
Значения типа записи задаются путем предоставления списка именованных полей. Правильный код для функции get_foo
должен вывестись следующим образом.
function get_foo return Foo is
return (bar => 1);
end get_foo;
Можно также указать тип записи с помощью выражения Foo'(bar => 1)
.
Использование списка названных компонентов на практике лучше, чем позиционная инилизация. Вы можете забыть положение компонента, и оно не изменится, если вы добавите новое поле в свою запись.