[英]Ada - Nullable type
如何將自定義類型初始化為null?
我想做這個 :
TestVar : T_MyType := null;
與:
type T_MyType is
record
field1 : float
field2 : Boolean
end record
但是我有一個錯誤:
在myfile.ads中定義的預期類型“ T_MyType”
您可以使用變體記錄來模擬可為空的類型:
type T_MyType(Is_Null : Boolean := True) is
record
case Is_Null is
when False =>
field1 : Float
field2 : Boolean
when True =>
null; -- no parameters
end case;
end record
-- Example "Null" value. Trying to use field1 or field2 will
-- result in an exception as they are not available when Is_Null
-- is set to True
Null_MyType : constant T_MyType := (Is_Null => True);
默認情況下,此類型沒有參數(Is_Null默認為True)。 對於大型類型,您可能要小心返回其中之一,因為它可能會很昂貴(您需要與編譯器供應商聯系,以了解是否對此進行了優化)。
訪問中Ada中唯一可以為null的東西是指針的名稱。
在您的情況下,您需要定義在嘗試為值分配null時的期望。 有時,我們定義了一種未初始化的值,例如:
null_value : constant T_MyType := T_MyType'(field1 => -1.0, field2 => False);
但是,如果您真的想像在C / C ++中那樣處理指針,則需要聲明關聯的訪問類型 :
type T_MyType_Access is access T_MyType;
這樣,您就可以聲明指向_T_MyType_對象的指針。
與C / C ++相比,在Ada中只有一件事,您通常可以在不使用訪問類型 (即指針)的情況下構建整個應用程序。
默認情況下,Ada類型是值類型。
也就是說,TestVar是對象本身,其內容為field1,field2。 您可以在源代碼中定義它的地方想象它。 它與擁有像Float這樣的簡單類型的變量沒有什么不同。
在C#或類似語言中,某些類型是“值類型”,而另一些類型是“引用類型”。 在后一種情況下,TestVar實際上不是實際對象的指針,而是對象的指針。
在您的Ada代碼中,要賦予TestVar的值例如是(1.23, True)
。
如果確實需要指針(請小心,比起您想像的要少得多,如果您來自C,C ++,C#等),則可以定義訪問類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.