ada中变量的数据类型

Datatype of variable in ada

如何在 Ada 中找到变量的数据类型?

例如给定

INT : integer;

如何为这个变量打印 "the datatype is integer"?

在Python中,type()可以用来查找类型。 Ada 中有没有类似的函数来查找变量的数据类型?

Ada 是一种强类型语言,当你声明一个变量时,你就指定了它的类型。因此,return 变量类型的函数没有用处,就像在具有无类型变量的语言中那样。程序已经知道类型。

如果变量 X 声明为类型 T'Class,则实际值的类型可以是 T 或从 T 派生的任何类型。在这种情况下,您可以使用 X'Tag 来获取值实际类型的 tag,这是您可以获得的最接近实际类型的值。一旦你有了一个标签,你就可以做一些事情,比如获取类型的名称(在 Ada.Tags 中有这方面的功能),将它与某种类型的标签进行比较以查看它是否是那种类型等等。但是 Integer 不是标记类型,因此您不能在其上使用 'Tag 并且没有任何用处。

如果您将 INT 声明为 Integer,它将始终是该范围内的 Integer。 所以你可以做一个像这样的函数:

function the_type(I : Integer) return String is ("Integer");

如果变量 INT 总是 Integer.[=15=,我想不出你想要检查变量类型的原因]

另一方面,如果 INT 可以在 运行 时更改类型,您将需要代码来模拟:

procedure Main is
    type Memory_Type_Enum is (Integer_Type, Float_Type);

    record Variable
        Memory_Location : Address;
        Memory_Type : Memory_Type_Enum;
    end record;

    INT : Variable;
begin
    INT := Allocate_Variable(Float_Type);
    INT := Allocate_Variable(Integer_Type);
    Put_Line(INT.Memory_Type'Img);
end;

但是,无论您使用的是动态类型系统还是静态类型系统,都取决于您如何实施类型检查。