簡體   English   中英

Ada,初始化一次數組

[英]Ada, initializing an array once

我在Ada寫的第一個學校項目是由任務組成的。 我需要初始化一次數組。 我應該在程序中的哪個位置確保它只運行一次? Ada使用類似於構造函數的東西嗎? 我需要初始化的數組:

type Book is record
    Quantity: Integer;
    Price: Float;
end record;

type ArrayOfBooks is array (0 .. 5) of Book;

MyBooks: ArrayOfBooks;

任何幫助將非常感激。

我不清楚你需要什么樣的初始化。 我將討論幾種可能性; 希望其中一個適合您的需求。

(1)您可以在數組的聲明中包含一個初始表達式:

MyBooks : ArrayOfBooks := (others => (Quantity => 0, Price => 0.0));

MyBooks每個元素初始化為一個記錄,其字段分別為00.0 此初始化僅執行一次(假設主過程僅執行一次)。 當執行主程序時,它首先詳細說明程序的聲明部分中的所有聲明; 詳細闡述MyBooks的聲明包括MyBooks分配初始表達式。

(2)如果一個簡單的初始表達式不夠好並且你需要一些代碼來進行初始化,你可以編寫一個函數來返回一個ArrayOfBooks並使用函數調用作為你的初始表達式。 或者,您可以將任務聲明放在嵌套塊中,以便確保在任務啟動之前執行初始化代碼:

procedure Main is
    ...
    MyBooks : ArrayOfBooks;
begin
    ... code to open a file, for example
    for I in MyBooks'range loop
        LoadInformationForOneBook (MyFile, MyBooks(I));
    end loop;
    declare
        ... Now declare your tasks.  At this point, you can be sure
        ... that MyBooks has been initialized.
        ... The tasks will start up at this point.
    begin
        ...
    end;
end Main;

這也將確保僅調用初始化一次。

(3)如果你真的需要其中一個任務來初始化MyBooks ,並且你想安排一些事情以便第一個到達它的任務初始化數組,你可以通過設置一個標志來告訴你數組是否有已初始化。 要正確執行此操作,以便在兩個任務幾乎同時到達該點時沒有問題,您應該設置受保護對象。 由於這可能超出您的需要,除非您需要,否則我不會詳細介紹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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