枚举文字也用作参数名称

时间:2019-03-25 17:55:38

标签: ada

我创建了以下示例代码:

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。我发现了两个非最佳解决方案来解决该问题。如果我对重命名文字或参数名称不感兴趣,还有其他解决方案吗?

1 个答案:

答案 0 :(得分:6)

您的问题是过程Bar中的参数B隐藏了过程Bar的封闭范围中声明的枚举标识符B。您只需使用参数命名作用域:

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
      Foo (The_Type => Main.B);
   end Bar;
begin
   Bar ("Hello");
end Main;