簡體   English   中英

Ada類型聲明語義

[英]Ada Type Declaration Semantics

我正在上大學的Ada。 今天,我的教授向我們提出了一個問題。 在下面的代碼中,有三個類型聲明。 第三個沒有編譯錯誤“缺少新內容”。

我假設關鍵字'Type'讓編譯器知道我們即將定義存儲類,所以我的問題是:

聲明之間的語義差異是什么?
如果省略關鍵字Integer,則在指定范圍時Ada會采用通用整數類型嗎? 這似乎是顯而易見的合乎邏輯的結果。 此外,如果關鍵字“整數”在“范圍”之前是新的,那么是否需要?

我希望這不是模棱兩可的,我進行了一些研究,但似乎找不到確切的答案,或者也許我想和Ada接觸很多新手,以了解我的發現。 我真的很想了解下面發生了什么。

with Ada.Text_IO; use ada.Text_IO;
    procedure any is
    type abc is new Integer range 1..10;
    num : abc;
    type def is range 1..10;
    num2 : def;
    type xyz is Integer range 1..10;
    num3 : xyz;
      begin
      num := 5;
      num2 := 6;
      num3 := 7;
 end any;

在第一個聲明中,您要聲明一個不同於Integer的新類型,但是要從中繼承一些屬性(例如,原始函數和運算符並不重要)。

對於每個實際問題,在這種情況下,類型abcdef在語義上都是等效的。 但是,如果您對基本類型進行了基本操作,則將有所不同。

在這種情況下,您不能真正考慮范圍的邊界是否具有類型,但是,如果存在基類型,則它們必須滿足位於基類型范圍內的約束。

現在xyz是不正確的,並且Integer在這里並不意味着任何東西。 這可能意味着兩件事:

  • 您確實想聲明一個從整數派生的新類型。 在這種情況下,您會丟失新關鍵字。
  • 您想聲明整數的子類型。 就名稱解析和靜態類型匹配而言,子類型基本上等同於其基本類型,但是在執行時將具有不同的約束。

此外,如果關鍵字“整數”在“范圍”之前是新的,那么是否需要?

Integer不是關鍵字,它是標准包中定義的類型。 在此聲明中

type A is Integer range 1 .. 10;

Integer是對Ada不期望的類型的引用。 它期望一個類型定義,一個基本類型。

暫無
暫無

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

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