an old topic (pun intended)

Davidson Corry davidsoncorry at comcast.net
Sun Oct 30 17:56:02 PDT 2011


On 10/29/2011 8:26 PM, bearophile wrote:
>> The only reason to have an 'out(result)' form is to declare that we
>> intend to use the magic 'result' symbol in the post-condition testing.
>
> This is not true. Currently 'result' has nothing magic, it's just a variable name, you are free to change it:

Ah. I did not know that. Thanks for the info.

>> I think the thing to do is to just declare 'out' as we currently do [or
>> 'scope(out)' as I am proposing], and treat the 'result' symbol magically
>> in the post-condition code whether or not it is pre-declared -- that is,
>> have the compiler find it and interpret it as the magic returned-value.
>
> In some rare situations magic is acceptable, but it's dangerous, and in most situations it's better to avoid it.Unless "result" becomes a keyword (so you can't assign something to it 
by mistake), then the current syntax with out(someConstVariableName) 
seems better.

Ah, again. 'Result' *is* magic in Eiffel (in all functions). I assumed 
that it was equivalently magic in D (in the post-condition context 
only), and named that way *because* of the Eiffel usage. You learn 
something every day.

The notion that you can name exactly zero symbols or exactly one symbol 
in the 'out()' "argument list", and if you name exactly one symbol then 
it gets (a copy of?) the returned value from the function which you can 
then use in your post-condition test strikes me as slightly more 
flexible at the cost of becoming slightly less obvious, and equally 
magical either way. But that's just my opinion, and I don't feel 
strongly about it.

-- Davidson


More information about the Digitalmars-d mailing list