On Thu, 2004-11-11 at 10:28, Mohammad Khan wrote: > The main reason I brought up this issue is: > to make differentiation between "a value in boolean context" and "its > real value" > > Example, > a = Foo.new > b = nil > > a is *true* in boolean context but it is not really a TrueClass or true. > again, b is 'false' in a boolean context but it is not a FalseClass or > false. > > thats why, I proposed to have > > class Object > def true? > return ( (self == true) or (self === TrueClass) ) > end > > def false? > return ( (self == false) or (self === FalseClass) ) > end > end > > so.. again for the above examples: > puts "a is true in boolean context" if a > puts "a is really a *true*" if a.true? > > > puts "b is false in boolean context" if not b Correction, please read puts "b is false in boolean context" if b > puts "b is really *false*" if b.false? > > if you find true? and false? is not readable or more complex to use, you > might like to write: > puts "a is really a *true*" if a == true > puts "b is really a *false*" if b == false > > > Thanks again, > Mohammad > > > On Thu, 2004-11-11 at 08:08, Robert Klemme wrote: > > "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 -- Everyone thinks of changing the world, but no one thinks of changing himself. - Leo Tolstoy