"Jean-Hugues ROBERT" <jean_hugues_robert / yahoo.com> schrieb im Newsbeitrag news:6.0.1.1.0.20041111082218.040feec0 / pop.mail.yahoo.com... > Hi, > > I think things should stay the way they are, here is > why. > > Things are a little complex about truthness/falseness. > One has to distinguish the "value" of an object from > its "truthness". I'm not sure whether I follow you here: an object *is* the value. There is no such thing as a value that is distinct from the object. An object is interpreted as in boolean contexts according to certain rules (false and nil => false, all others true); you could call this convention "truthness", yes. > Only nil and false are "false" from a "truthness" > perspective. All other objects are "true". > > For true? and false? to be somehow usefull, I first felt > that they should relate to the "truthness" of the > object, not its "value". That is very different from > nil? (it checks the value of the object, only The nil > object is nil?). > > This leads to: > class Object > def true? ; true ; end > def false? ; not true? ; end > end > class NilClass > def true? ; false ; end > end > class FalseClass > def true? ; false ; end > end You can simplify this to class Object def true?; self end def false?; not true? end end because it's the standard convention. Basically this adds one level of indirection (the method call). > Usage: 1 - Checking truthness > if some_thing.true? then > xxx > end > Usage: 2 - Checking value > if some_thing == true then > xxx > end > > On the other hand, one may consider that > checking the value is what matters most, > versus checking the truthness. I never felt the need for "some_thing == true". In which cases do you need this? > This leads to: > class Object > def true? ; false ; end > def false? ; false ; end > end > class TrueClass > def true? ; true ; end > end > class FalseClass > def false? ; true ; end > end You can simplify this, too: class Object def true?; TrueClass === self end def false?; FalseClass === self end end > Usage: 1 - Checking the truthness > if some_thing then > xxx > end > Usage: 2 - Checking the value > if some_thing.true? then > xxx > end > > Solution 2 (checking values) leads to > code that is slightly smaller (less characters). > Which is probably a good thing by itself. > However, I think that it is fairly unreadable. Yep. I find this quite irritating. When I see "if some_thing.true? then..." I'd expect the truthness of some_thing to be used, not the outcome of the test whether some_thing is actually the instance 'true'. > As a conclusion, I think that the status quo > is the best solution. Instead of a hard to > understand true?/false?, let's keep an explicit > xxx == true when value matters instead of > truthness. .... or "TrueClass === xxx" for that matter. Yes. Totally agree. > My 0.2 Euros. Now we got 0.22 EUR. :-) Kind regards robert