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