Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Truth value evaluating of an object

Reply
Thread Tools

Truth value evaluating of an object

 
 
Dave River
Guest
Posts: n/a
 
      10-27-2007
I know ruby treat an object as false whenever it is nil or false.
However, I wonder if there are any other ways to change this behavior.

For example, I define a class called AreYouOk.
class AreYouOk
def initialize(ok)
@ok = ok
end
end

x = AreYouOk.new(false)
puts "you are ok" if x

Since x is not nil, ruby prints " you are ok".
However, I want ruby to make the decision based on the @ok instance
variable. Are there any ways to do that?

I know that there is a method called __bool__ in Python. You can define
your __bool__ method in your class. The truth value of an object is
based on the return value of __bool__. Does ruby provide similar
mechanism?
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Dave River
Guest
Posts: n/a
 
      10-27-2007

> Thus 'if x.ok?' returns the same as 'if x' for any object, but @ok for
> yours!



Thanks for your explanation!

In fact, I am making a wrapper class called Boolean which cooperates
with some legacy code in my company because there are some compatibility
problems between different languages.

I write some code like the following and the Boolean object hides some
underlying code which solve the compatibility problems.
x = Boolean.new()
if x
do something....
end

If ruby does not support something like __bool__ in Python, I need to
write some code in the following way.
x = Boolean.new()
if x.evaluate()
do something...
end

But I would prefer "if x " instead of "if x.evaluate" because it is more
straight forward. So, I would like to know whether there are any ways to
do so.

Regards,
Dave
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Phrogz
Guest
Posts: n/a
 
      10-27-2007
On Oct 27, 9:18 am, Dave River <(E-Mail Removed)> wrote:
> I write some code like the following and the Boolean object hides some
> underlying code which solve the compatibility problems.
> x = Boolean.new()
> if x
> do something....
> end
>
> If ruby does not support something like __bool__ in Python, I need to
> write some code in the following way.
> x = Boolean.new()
> if x.evaluate()
> do something...
> end
>
> But I would prefer "if x " instead of "if x.evaluate" because it is more
> straight forward. So, I would like to know whether there are any ways to
> do so.


There are not any ways to do so in Ruby. Sorry. (This question comes
up every few weeks or so.)

 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      10-27-2007
On 27.10.2007 17:18, Dave River wrote:
>> Thus 'if x.ok?' returns the same as 'if x' for any object, but @ok for
>> yours!

>
>
> Thanks for your explanation!
>
> In fact, I am making a wrapper class called Boolean which cooperates
> with some legacy code in my company because there are some compatibility
> problems between different languages.
>
> I write some code like the following and the Boolean object hides some
> underlying code which solve the compatibility problems.
> x = Boolean.new()
> if x
> do something....
> end
>
> If ruby does not support something like __bool__ in Python, I need to
> write some code in the following way.
> x = Boolean.new()
> if x.evaluate()
> do something...
> end
>
> But I would prefer "if x " instead of "if x.evaluate" because it is more
> straight forward. So, I would like to know whether there are any ways to
> do so.


What exactly does Boolean do? Maybe you can get rid of it or do some
other changes so you can directly work with "true" and "false.

Kind regards

robert
 
Reply With Quote
 
Morton Goldberg
Guest
Posts: n/a
 
      10-27-2007
On Oct 27, 2007, at 10:35 AM, Dave River wrote:

> I know ruby treat an object as false whenever it is nil or false.
> However, I wonder if there are any other ways to change this behavior.
>
> For example, I define a class called AreYouOk.
> class AreYouOk
> def initialize(ok)
> @ok = ok
> end
> end
>
> x = AreYouOk.new(false)
> puts "you are ok" if x
>
> Since x is not nil, ruby prints " you are ok".
> However, I want ruby to make the decision based on the @ok instance
> variable. Are there any ways to do that?
>
> I know that there is a method called __bool__ in Python. You can
> define
> your __bool__ method in your class. The truth value of an object is
> based on the return value of __bool__. Does ruby provide similar
> mechanism?


What you are asking about looks to me like a flag class.

<code>
class Flag
def initialize(state=false)
@state = state
end
def set?
@state
end
def set
@state = true
end
def clear
@state = false
end
end

ok = Flag.new
puts "you are ok" if ok.set?
puts "you are not ok" unless ok.set?
ok.set
puts "you are ok" if ok.set?
puts "you are not ok" unless ok.set?

</code>

First the string "you are not ok" is printed. After the flag is set,
the string "you are ok" is printed.

Regards, Morton

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
evaluating a object string jman Javascript 4 03-06-2008 07:53 PM
Truth value evaluating of an object Byron Ruby 0 10-28-2007 01:26 AM
Confused - suggest parentheses around assignment used as truth value Richard Tobin C Programming 6 04-22-2007 10:46 PM
How to validate one control based on the truth value of another validator? antonyliu2002@yahoo.com ASP .Net 1 10-12-2005 03:56 PM
Java program is not evaluating String value correctly... Shelly Java 8 12-10-2004 04:12 PM



Advertisments