From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Problems with 'class, help anyone?
Date: Tue, 12 Nov 2002 13:20:00 +0100
Date: 2002-11-12T13:20:00+01:00 [thread overview]
Message-ID: <aqqrm7$chi61$1@ID-77047.news.dfncis.de> (raw)
In-Reply-To: mailman.1037026681.5800.comp.lang.ada@ada.eu.org
Alexandre E. Kopilovitch wrote:
>>> There is another way, with perhaps even less incompatibility: let's
>>> introduce third mode for a formal parameter - "return" mode (in addition
>>> to conventional "in" and "out"). That "return" may be applied to the
>>> procedure's first parameter only, and it means the same as "out" mode,
>>> with single exception: if the first parameter of a procedure is in
>>> "return" mode then the procedure *may* be called without the
>>> corresponding (first) argument, and in such a case it returns value. For
>>> example:
>>>
>>> procedure Two_Fold(Result : return Boolean; Something : in Integer);
>>>
>>> X : Boolean;
>>> Two_Fold(X, 0); -- "return" as "out", procedure does not return value
>>>
>>> if Two_Fold(0) then -- first argument omitted, procedure returns value
>>> ...
>>> end if;
>>
>>But an out parameter and a return value are not the same, i.e. they cannot
>>generally be interchanged!
>>
>>Consider e.g.
>> function F return String;
>>vs.
>> procedure P (S: out String);
>>The former has no idea how long the object is that will get the result (if
>>any), the latter takes the length from the parameter.
>
> Well, I was not writing an AI (perhaps, I should?), therefore I did not
> look at the details. Surely, you are right - there must be a limitation
> for a parameter in "return" mode: if one is of indefinite type then the
> currently undefined attributes (Length, First, etc.) cannot be used for
> that parameter.
If the goal of your proposal is to expose the result as a variable within
the body, then some equilibristic is indeed required. For instance, you
could require that such a parameter has to be overridden within the body:
procedure Read (Item : result String) is
Length : Natural;
begin
Get (Length); -- Get the actual string length
declare
Text : String (1..Length) renames Item; -- Override
begin
Get (Text);
end;
end Read;
Honestly, I do not like it. Further, if you go this way, then you should
consequently say, OK, let's allow multiple-return functions capable to
return more than one potentially unlimited result. Maybe then it will worth
the efforts.
--
Regards,
Dmitry A. Kazakov
www.dmitry-kazakov.de
next prev parent reply other threads:[~2002-11-12 12:20 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-11-11 15:12 Problems with 'class, help anyone? Alexandre E. Kopilovitch
2002-11-12 12:20 ` Dmitry A. Kazakov [this message]
-- strict thread matches above, loose matches on Subject: below --
2002-11-11 9:03 Grein, Christoph
2002-11-09 0:11 Alexandre E. Kopilovitch
2002-10-29 4:48
2002-10-29 6:08 ` Jim Rogers
2002-10-29 19:10 `
2002-10-30 5:27 `
2002-10-30 7:49 ` Simon Wright
2002-10-30 8:13 ` Jim Rogers
2002-11-02 4:02 `
2002-11-05 2:40 `
2002-11-05 4:56 ` Jim Rogers
2002-11-05 17:25 ` Stephen Leake
2002-11-05 22:29 ` Robert A Duff
2002-11-06 8:54 ` Pascal Obry
2002-11-06 15:00 ` Georg Bauhaus
2002-11-06 17:18 ` Stephen Leake
2002-11-07 14:14 ` Georg Bauhaus
2002-11-06 15:19 ` Ted Dennison
2002-11-06 17:22 ` Stephen Leake
2002-11-07 10:32 ` Preben Randhol
2002-11-07 15:53 ` Stephen Leake
2002-11-06 13:48 ` John English
2002-11-07 15:07 ` Robert A Duff
2002-11-08 9:48 ` Dmitry A. Kazakov
2002-11-08 13:44 ` Robert A Duff
2002-11-08 14:27 ` Jean-Pierre Rosen
2002-11-09 18:40 ` Dmitry A. Kazakov
2002-11-11 9:51 ` Lutz Donnerhacke
2002-11-11 13:24 ` Dmitry A. Kazakov
2002-11-11 13:55 ` Lutz Donnerhacke
2002-11-09 19:02 ` Robert A Duff
2002-11-10 17:13 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox