There were two good reasons why Ruby 1.8 didn't support certain kinds of overloading like ||
/or
, &&
/and
, !
/not
, ?:
:
- Short circuit semantics cannot be implemented with methods in Ruby without very extensive changes to the language.
- Ruby is hard coded to treat only
nil
andfalse
as false in boolean contexts.
The first reason doesn't apply to !
/not
but second still does. It's not like you can introduce your own kinds of boolean-like objects using just !
while &&
/||
are still hard-coded. For other uses there's already complementarity operator ~
with &
/|
.
I can imagine there's a lot of code expecting !obj
to be synonymous with obj ? false : true
, and !!obj
with obj ? true : false
- I'm not even sure how is code supposed to deal with objects that evaluate to true in boolean context, but !
to something non-false.
It doesn't look like Ruby plans to introduce support for other false values. Nothing in Ruby stdlib seems to override !
so I haven't found any examples.
Does it have some really good use I'm missing?