ada中变量的数据类型

ada中变量的数据类型,ada,Ada,如何在Ada中找到变量的数据类型 例如,给定 INT : integer; 如何打印此变量的“数据类型为整数” 在Python中,type()可用于查找类型。Ada中是否有类似的函数来查找变量的数据类型?Ada是一种强类型语言,当您声明变量时,您可以指定其类型。因此,函数返回变量的类型是没有用的,因为在使用非类型化变量的语言中会出现这种情况。程序已经知道了类型 如果变量X用类型T'Class声明,则实际值的类型可以是T或从T派生的任何类型。在这种情况下,可以使用X'Tag获取值的实际类型的标记

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

例如,给定

INT : integer;
如何打印此变量的“数据类型为整数”


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

Ada是一种强类型语言,当您声明变量时,您可以指定其类型。因此,函数返回变量的类型是没有用的,因为在使用非类型化变量的语言中会出现这种情况。程序已经知道了类型


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

Ada是一种强类型语言,当您声明一个变量时,您可以指定它的类型。因此,函数返回变量的类型是没有用的,因为在使用非类型化变量的语言中会出现这种情况。程序已经知道了类型


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

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

function the_type(I : Integer) return String is ("Integer");
如果变量
INT
总是一个整数,我想不出你为什么要检查它的类型

另一方面,如果
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;

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

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

function the_type(I : Integer) return String is ("Integer");
如果变量
INT
总是一个整数,我想不出你为什么要检查它的类型

另一方面,如果
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;

但是,如何实现类型检查取决于您自己,无论是动态类型系统还是静态类型。

您还可以检查派生类型类中的
Classwide\u实例
,查看该实例是否属于
Derived\u类型
(或者其派生类型之一,当然,如果有的话)。您还可以在派生类型的类中检查
Classwide\u实例
,以查看该实例是否属于
派生类型
(当然,如果有的话,也可以是其派生类型之一)。