Types Ada-可空类型

Types Ada-可空类型,types,null,ada,Types,Null,Ada,如何将自定义类型初始化为null 我想这样做: TestVar : T_MyType := null; 与: type T_MyType is record field1 : float field2 : Boolean end record 但我有一个错误: 在myfile.ads上定义的预期类型T_MyType 默认情况下,Ada类型是值类型 也就是说,TestVar是对象本身,其内容为field1,field2。您可以在源代码中定义它的地方想象它。它与使用类似于Floa

如何将自定义类型初始化为null

我想这样做:

TestVar : T_MyType := null;
与:

type T_MyType is
record
    field1 : float
    field2 : Boolean
end record
但我有一个错误:

在myfile.ads上定义的预期类型T_MyType


默认情况下,Ada类型是值类型

也就是说,TestVar是对象本身,其内容为field1,field2。您可以在源代码中定义它的地方想象它。它与使用类似于Float的简单类型的变量没有什么不同

在C或类似语言中,有些类型是值类型,但有些类型是引用类型。在后一种情况下,TestVar实际上是指向真实对象的指针,而不是对象本身

在Ada代码中,给TestVar的值是,例如,1.23,True


如果你真的需要指针,你需要比你想象的要小得多,如果你来自C,C++,C,…您可以定义访问类型。

默认情况下,Ada类型是值类型

也就是说,TestVar是对象本身,其内容为field1,field2。您可以在源代码中定义它的地方想象它。它与使用类似于Float的简单类型的变量没有什么不同

在C或类似语言中,有些类型是值类型,但有些类型是引用类型。在后一种情况下,TestVar实际上是指向真实对象的指针,而不是对象本身

在Ada代码中,给TestVar的值是,例如,1.23,True


如果你真的需要指针,你需要比你想象的要小得多,如果你来自C,C++,C,…您可以定义访问类型。

在Ada中唯一可以为空的是指针的名称

在您的情况下,您需要定义在尝试将null赋值给您的值时所期望的内容。有时,我们定义一种未初始化的值,例如:

null_值:常量T_MyType:=T_MyType'field1=>-1.0,field2=>False; 但是,如果您确实希望像在C/C++中那样处理指针,则需要声明关联的访问类型:

类型T_MyType_Access是Access T_MyType; 有了它,您就可以声明指向_T_MyType_对象的指针


只有一件事,与C/C++相比,在Ada中,您通常可以构建整个应用程序,而无需使用访问类型,即指针。

在Ada中,唯一可以为null的是指针的名称

在您的情况下,您需要定义在尝试将null赋值给您的值时所期望的内容。有时,我们定义一种未初始化的值,例如:

null_值:常量T_MyType:=T_MyType'field1=>-1.0,field2=>False; 但是,如果您确实希望像在C/C++中那样处理指针,则需要声明关联的访问类型:

类型T_MyType_Access是Access T_MyType; 有了它,您就可以声明指向_T_MyType_对象的指针


与C/C++相比,在Ada中,您通常可以构建整个应用程序,而无需使用访问类型(又称指针)。

您可以使用变量记录模拟可为空的类型:

类型T_MyTypeIs_Null:布尔值:=True是 记录 case Is_Null Is 当为False=> 字段1:浮动 字段2:布尔值 当为True=> 空;-无参数 终例; 结束记录 -示例空值。尝试使用field1或field2将 -导致异常,因为当值为Null时它们不可用 -设置为True Null\u MyType:constant T\u MyType:=Is\u Null=>True;
默认情况下,此类型没有参数。默认情况下,如果为Null,则为True。对于大型类型,您可能必须小心返回其中一个,因为这可能会很昂贵。您需要查看编译器供应商,以了解其是否对此进行了优化。

您可以使用变量记录模拟可为空的类型:

类型T_MyTypeIs_Null:布尔值:=True是 记录 case Is_Null Is 当为False=> 字段1:浮动 字段2:布尔值 当为True=> 空;-无参数 终例; 结束记录 -示例空值。尝试使用field1或field2将 -导致异常,因为当值为Null时它们不可用 -设置为True Null\u MyType:constant T\u MyType:=Is\u Null=>True;
默认情况下,此类型没有参数。默认情况下,如果为Null,则为True。对于大型类型,您可能需要小心返回其中一个,因为这可能会很昂贵。您需要查看编译器供应商,以了解它是否对此进行了优化。

我实际上来自C,我对Ada非常陌生。我不知道如何在Ada中使用指针,我会为此做一些研究。@A.pissict在C中,就像在Java中一样,AFAIK,一切都是指针,即使它是隐藏的。在Ada中,就像在C/C++中一样,指针与值、结构、类实例等不同。。。。如果您以前从未使用过指针,这可能会让您了解它是什么。
然后看看我实际上来自C,我对Ada很陌生。我不知道如何在Ada中使用指针,我会为此做一些研究。@A.pissict在C中,就像在Java中一样,AFAIK,一切都是指针,即使它是隐藏的。在Ada中,就像在C/C++中一样,指针与值、结构、类实例等不同。。。。如果您以前从未使用过指针,这可能会让您了解它是什么。然后看一看有用的信息是:出于什么目的,你想要一个空值。一个有用的信息是:出于什么目的,你想要一个空值。当变量被创建时,你如何测试鉴别值是什么,比如如果null\u MyType.Is\u null Then…?@Patrick是的,这是一种方法。如果愿意,还可以重载=比较运算符,以便与Null\u MyType进行比较。如何测试创建变量时的判别值,例如如果Null\u MyType.Is\u Null,则…?@Patrick是,这是一种方法。如果愿意,还可以重载=比较运算符,以便与Null_MyType进行比较。