Я создал следующий пример кода:
with Ada.Text_IO;
procedure Main is
type My_Type is
(A,
B,
C);
procedure Foo (The_Type : My_Type) is
begin
null;
end Foo;
procedure Bar (B : String) is
begin
-- Error
Foo (The_Type => B);
-- Ok
Foo (The_Type => My_Type'Succ (A));
-- Ok
Foo (The_Type => My_Type'Value ("B"));
end Bar;
begin
Bar ("Hello");
end Main;
Литерал B
, определенный в типе перечисления My_Type
, также используется в качестве имени параметра в процедуре Bar
.К сожалению, компилятор предполагает, что в вызове процедуры Foo (The_Type => B);
B
- это имя параметра, а не литерал B
в определенном типе перечисления.Я нашел два неоптимальных решения для решения проблемы.Есть ли другие решения, если меня не интересует переименование литерала или имени параметра?