From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.5-pre1 Path: eternal-september.org!reader02.eternal-september.org!news.gegeweb.eu!gegeweb.org!usenet-fr.net!proxad.net!feeder1-2.proxad.net!cleanfeed2-a.proxad.net!nnrp1-1.free.fr!not-for-mail Newsgroups: comp.lang.ada References: <606f5938$0$27421$426a74cc@news.free.fr> <606fe610$0$3717$426a74cc@news.free.fr> From: DrPi <314@drpi.fr> Subject: Re: GtkAda : Trying to derive a widget Date: Fri, 9 Apr 2021 13:32:03 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr Content-Transfer-Encoding: 8bit Message-ID: <60703b35$0$3265$426a74cc@news.free.fr> Organization: Guest of ProXad - France NNTP-Posting-Date: 09 Apr 2021 13:32:05 CEST NNTP-Posting-Host: 82.65.30.55 X-Trace: 1617967925 news-1.free.fr 3265 82.65.30.55:52785 X-Complaints-To: abuse@proxad.net Xref: reader02.eternal-september.org comp.lang.ada:61765 List-Id: Le 09/04/2021 à 08:12, J-P. Rosen a écrit : > Le 09/04/2021 à 07:28, DrPi a écrit : >>> Without "use" Initialize is unambiguous. >>> >> That makes sense. >> However, I don't understand why there is ambiguity when using "use". >> Debug_Panel (the type) is of type Debug_Panel_Record, so Initialize >> should resolve to the one using this type. Well, I guess I'm wrong. > No, the type is "access Debug_Panel_Record'Class", and the other > initialize is for "access Gtk_Scrolled_Window_Record'Class", which > covers the other one. > What I mean is that one "Initialize" procedure has a parameter of type "access Debug_Panel_Record'Class" and the other of type "access Gtk_Scrolled_Window_Record'Class". The call to "Initialize" is made with a "Debug_Panel" type which is an access to "Debug_Panel_Record'Class" not " an access to "Gtk_Scrolled_Window_Record'Class". So, why is there an ambiguity here ? > Remember that a class wide type ('Class) is a different type that covers > all descendants. > >>> P.S. When you create new widget it is better to use a more general >>> ancestor hiding insufficient details, e.g. >>> >>>    type Debug_Panel_Record is >>>       new Gtk.Widget.Gtk_Widget_Record with private; >>>    ... >>> private >>>    type Debug_Panel_Record is >>>       new Gtk.Scrolled_Window.Gtk_Scrolled_Window_Record with >>>    record >>>       ... >>>    end record; >> >> I'm surprized this is possible to write such a thing in Ada. >> What does the compiler do with this ? >> There is no problem, since > Gtk.Scrolled_Window.Gtk_Scrolled_Window_Record is a descendant of > Gtk.Widget.Gtk_Widget_Record. There is no lie: a Debug_Panel_Record IS A > Gtk_Widget_Record. The private view has more information: it actually IS > A Gtk_Scrolled_Window_Record, but the extra properties are not > accessible outside from the package body. > Ok. That's interesting. One more thing learned today :)