Поиск…


Синтаксис

  • function Enumeration ' Image (Argument: Enumeration'Base) return String;
  • function Enumeration ' Img return String; - GNAT
  • function Enumeration'Val (Argument: Universal_Integer) return Enumeration'Base;
  • function Enumeration'Pos (Аргумент: Нумерация) возвращает Universal_Integer;
  • функция Enumeration'Enum_Rep (Аргумент: Нумерация) возвращает Universal_Integer;
  • function Literal 'Enum_Rep return Universal_Integer; - GNAT
  • function Literal 'Address return System.Address;
  • для использования перечисления (Literal_1 => Universal_Integer , Literal_n => Universal_Integer );
  • ( Literal in Enumeration) возвращает Boolean;

Итерационные литералы

Литерал внутри перечисления является дискретным типом, поэтому мы можем использовать атрибут Image чтобы узнать, какой буквальный текст является текстовой. Обратите внимание, что это печатает то же слово, что и в коде (но в верхнем регистре).

with Ada.Text_IO; use Ada.Text_IO;

procedure Main is
   type Fruit is (Banana, Pear, Orange, Melon);
begin
   for I in Fruit loop
      Put (Fruit'Image (I));
      New_Line;
   end loop;
end;

Результат

BANANA
PEAR
ORANGE
MELON

Использование пакета Enumeration_IO

Вместо атрибута Image и Ada.Text_IO.Put на литералах перечисления мы можем использовать общий пакет Ada.Text_IO.Enumeration_IO для печати литералов.

with Ada.Text_IO; use Ada.Text_IO;

procedure Main is
   type Fruit is (Banana, Pear, Orange, Melon);
   package Fruit_IO is new Enumeration_IO (Fruit); use Fruit_IO;
begin
   for I in Fruit loop
      Put (I);
      New_Line;
   end loop;
end;

Результат

BANANA
PEAR
ORANGE
MELON

Первый регистр символов верхнего регистра для нижних регистров

Атрибут Image заглаживает все символы литералов перечисления. Функция Case_Rule_For_Names применяет верхний регистр для первого символа и делает остальную нижнюю регистр.

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Strings.Maps.Constants; use Ada.Strings.Maps.Constants;
with Ada.Strings.Fixed; use Ada.Strings.Fixed;

procedure Main is
   type Fruit is (Banana, Pear, Orange, Melon);
   function Case_Rule_For_Names (Item : String) return String is
   begin
      return Translate (Item (Item'First .. Item'First), Upper_Case_Map) & Translate (Item (Item'First + 1 .. Item'Last), Lower_Case_Map);
   end;
begin
   for I in Fruit loop
      Put (Case_Rule_For_Names (Fruit'Image (I)));
      New_Line;
   end loop;
end;

Результат

Banana
Pear
Orange
Melon

Title Case, использование Enumeration_IO, для поддиапазона

Сочетание изменения символьного случая с Enumeration_IO и использование текстового буфера для изображения. Первый персонаж управляется на месте.

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Characters.Handling; use Ada.Characters.Handling;

procedure Main is
    type Fruit is (Banana, Pear, Orange, Melon);
    package Fruit_IO is new Enumeration_IO (Fruit);
    Buffer : String (1 .. Fruit'Width);
begin
   for I in Fruit range Pear .. Fruit'Last loop
       Fruit_IO.Put (To => Buffer,
                     Item => I,
                     Set => Lower_Case);
       Buffer (Buffer'First) := To_Upper (Buffer (Buffer'First));
       Put_Line (Buffer);
   end loop;
end;

Результат

Pear  
Orange
Melon 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow