Ада: записи вариантов, в которых подмножество случаев имеют общее свойство.

У меня есть следующий код, в котором я хотел бы, чтобы только первые два случая имели общее свойство; однако я получаю сообщение об ошибке "id" conflicts with the declaration at line 11, когда пытаюсь использовать этот синтаксис:

   type Shape (Which : Shape_Type := SQUARE) is
      record
      case Which is
         when Square =>
            id : Natural;   -- Line 11
         when Turnout =>
            id : Natural;   -- Line that causes error to be thrown
         when Invalid =>
            null;
      end case;
      end record;

ada
person weberc2    schedule 06.10.2012    source источник


Ответы (1)


Этот:

type Shape (Which : Shape_Type := SQUARE) is
   record
      case Which is
         when Square | Turnout =>
            id : Natural;
         when Invalid =>
            null;
      end case;
   end record;

Если вы позже захотите, чтобы случай Turnout имел дополнительный атрибут, вы могли бы сделать это, используя вложенный case (но вам все равно придется охватить все альтернативы):

type Shape (Which : Shape_Type := SQUARE) is
   record
      case Which is
         when Square | Turnout =>
            id : Natural;
            case Which is
               when Square =>
                  null;
               when Turnout =>
                  Deg : Natural;
               when Invalid =>
                  null;
            end case;
         when Invalid =>
            null;
      end case;
   end record;
person Simon Wright    schedule 06.10.2012
comment
+1 для вложенных корпусов; Я не знал, что вы можете это сделать, но это выглядит потрясающе / умно (в хорошем смысле, а не почесать голову / WTF-был-я-думаю, что пнул себя через 6 месяцев). - person Shark8; 07.10.2012