Buscar..


Sintaxis

  • 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 (Argument: Enumeration'Base) return Universal_Integer;
  • function Enumeration'Enum_Rep (Argument: Enumeration'Base) return universal_Integer;
  • function Literal 'Enum_Rep return Universal_Integer; - GNAT
  • función Literal 'Dirección de retorno System.Address;
  • para uso de enumeración (Literal_1 => Universal_Integer , Literal_n => Universal_Integer );
  • ( Literal in Enumeration) return Boolean;

Literales iterando

Un literal dentro de una enumeración es un tipo discreto, por lo que podemos usar la Image atributo para averiguar qué literal es el formulario de texto. Observe que esto imprime la misma palabra que en el código (pero en mayúsculas).

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;

Resultado

BANANA
PEAR
ORANGE
MELON

Usando el paquete Enumeration_IO

En lugar del atributo Image y Ada.Text_IO.Put en literales de enumeración, solo podemos usar el paquete genérico Ada.Text_IO.Enumeration_IO para imprimir los literales.

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;

Resultado

BANANA
PEAR
ORANGE
MELON

Primer carácter mayúscula resto minúsculas literales

Image atributo en mayúscula todos los caracteres de literales de enumeración. La función Case_Rule_For_Names aplica mayúsculas para el primer carácter y hace que el resto Case_Rule_For_Names minúscula.

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;

Resultado

Banana
Pear
Orange
Melon

Título del caso, Uso de Enumeration_IO, para un subrango

Combinando el caso de cambio de caracteres con Enumeration_IO y utilizando un búfer de texto para la imagen. El primer personaje es manipulado en su lugar.

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;

Resultado

Pear  
Orange
Melon 


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow