簡體   English   中英

Ada-可空類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM