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