comp.lang.ada
 help / color / mirror / Atom feed
From: Serge Robyns <serge.robyns@gmail.com>
Subject: Re: Declaring constants for a abstract tagged type and concrete sub classes
Date: Tue, 7 Jul 2015 12:51:41 -0700 (PDT)
Date: 2015-07-07T12:51:41-07:00	[thread overview]
Message-ID: <87b318bc-9534-413a-ad3c-dc2a12855ef2@googlegroups.com> (raw)
In-Reply-To: <mnh1ok$r6r$1@dont-email.me>

On Tuesday, 7 July 2015 19:21:46 UTC+2, G.B.  wrote:
> On 07.07.15 18:27, Serge Robyns wrote:
> 
> > Now I'm facing my other issue, how to "merge" the root and child part in a new No_Element ...  This is about valid Ada syntax.
> 
> > No_Element : constant T_Concrete := ( T_Root.No_Element, 789);
> 
> If the derived type stays within the package hierarchy,
> i.e. in a child package (that's Abstract_Root.No_Element
> in the extension aggregate):
> 
> ...
> private
>    No_Element : constant Non_Abstract :=
>       Non_Abstract'(No_Element with
>                     Abc => -42);
> 

This one did the trick!  I'm marveled by the syntax and the meaning of the standalone tick (').  I'm wondering how I'll master these idiosyncrasies.  I've tried to read years back the 95 RM but honestly it isn't bedtime lecture.  The wiki book is much readable but seems to leave quite some ground unexplored.  And I must admit I don't capture the essence of the difference between the above one and below one, except the obvious (variable vs. type) it puzzles me that it builds a variable out of type definition.

> That is, one can start an extension aggregate with
> an expression supplying the T_Root stuff from the parent
> type. Or,
> 
> ...
> private
>    No_Element : constant Non_Abstract :=
>       Non_Abstract'(T_Root with
>                     Abc => -42);
> 
> where T_Root stands for the type's defaults only.
> Outside the hierarchy, that could be
> 
> ...
> private
>    No_Element : constant Non_Abstract :=
>      Non_Abstract'(Abstract_Root.T_Root with
>                    Abc => -42);
> 
> This presumes, then, that no_element-ness is fully determined
> by the component Abc here, since Abstract_Root.No_Element's
> private view is unavailable outside the package hierarchy
> and so can't be depended upon.


  reply	other threads:[~2015-07-07 19:51 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-06 10:10 Declaring constants for a abstract tagged type and concrete sub classes Serge Robyns
2015-07-06 11:55 ` G.B.
2015-07-06 13:49   ` Serge Robyns
2015-07-06 17:36     ` G.B.
2015-07-07 16:27       ` Serge Robyns
2015-07-07 17:21         ` G.B.
2015-07-07 19:51           ` Serge Robyns [this message]
2015-07-07 20:14             ` Simon Wright
2015-07-07 20:18             ` Jeffrey R. Carter
2015-07-06 15:42 ` Simon Wright
2015-07-06 16:35   ` Serge Robyns
2015-07-06 17:02     ` Bob Duff
2015-07-06 21:16       ` Serge Robyns
2015-07-06 17:30 ` gautier_niouzes
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox