yank unary '+'?

Denis Koroskin 2korden at gmail.com
Tue Dec 8 05:45:41 PST 2009


On Tue, 08 Dec 2009 16:40:20 +0300, Michel Fortin  
<michel.fortin at michelf.com> wrote:

> On 2009-12-07 23:52:04 -0500, Andrei Alexandrescu  
> <SeeWebsiteForEmail at erdani.org> said:
>
>> Michel Fortin wrote:
>>> On 2009-12-07 01:29:14 -0500, Andrei Alexandrescu  
>>> <SeeWebsiteForEmail at erdani.org> said:
>>>
>>>> Using double negation !!x throughout, there are only advantages and  
>>>> no disadvantage. I hit that design with Pacquiao punches over the  
>>>> past week or so, and couldn't find any shortcoming. It's consistent  
>>>> across positive and negated uses, easy to understand, easy to define,  
>>>> consistent with built-in types, and Walter likes it.
>>>  I'm not sure that's a great idea. What if you define your own  
>>> FuzzyBool type (containing some sort of probability) and  
>>> FuzzyBool.opUnary!("!") returns an inverted FuzzyBool (with 1 -  
>>> original probability) instead of a regular bool, you'd have an  
>>> infinite loop trying to evaluate !!myBoolValue.
>>  Yeah, I thought about that liability and decided to discount it as a  
>> design mistake of the user. If a type decides to return non-bool from  
>> "!", they are bound to unpleasantly surprise its user in more ways than  
>> one. You can define a negate for FuzzyBool - just don't dress it as the  
>> "!" operator.
>
> To me, its using "!" to transform something to a bool that looks like a  
> hack. Surely there's a more explicit and intuitive way to define it that  
> doesn't tie it to a specific operator.
>
> opTest perhaps?
>
> And if you think "!" should always return a bool, then it should just  
> not be overridable and should be defined as returning the negation of  
> opTest (or whatever the name). I don't feel restricting unary "!" to  
> return a bool is sound when all other unary ops can be defined to return  
> anything.
>

You don't have to, but then you'll lose an ability to use UDT in if clause  
:P



More information about the Digitalmars-d mailing list