[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Binary Logic, Bug or Feature?

Malcolm Lockyer

11/28/2007 4:34:00 AM

Hi Guys,


I have been pulling my hair out for the last 20 minutes trying to find
out what is wrong in my app that has some pretty basic binary logic.
Here is a concise example in an irb session that shows my problem
(certainly, what I was working on wasn't nearly as simple the sides of
AND were variables etc.):

?> x = true and true
=> true
>> x
=> true

(this is what I expect, true and true = true)

>> x = true and false
=> false
>> x
=> true

But what I've got here is "true and false" == false, but it assigns
true to x. So true and false == false, but really == true... Have I
lost my mind, should it do this? Does it do it for anyone else? It
seems weird to me since the first example does what I expect, but the
second doesn't...

So now I'm reduced to doing something like:
if (true and false) then x = true else x = false end
which is kind of annoying, and not very ruby-esque IMO.

Any advice appreciated!

$ ruby -v
ruby 1.8.5 (2006-08-25) [i486-linux]

OS is Ubuntu 7.04.

(I know, old ruby ver - its just the stock ubuntu one)


THANKS!
- Malcolm.

2 Answers

Christian

11/28/2007 4:43:00 AM

0

It should work if you use && instead of and. Not sure why that is, but
I'm experencing the same thing as you when doing x = true and false,
but it works as expected when using x = true && false.


On 11/28/07, Malcolm Lockyer <maxpenguin@gmail.com> wrote:
> Hi Guys,
>
>
> I have been pulling my hair out for the last 20 minutes trying to find
> out what is wrong in my app that has some pretty basic binary logic.
> Here is a concise example in an irb session that shows my problem
> (certainly, what I was working on wasn't nearly as simple the sides of
> AND were variables etc.):
>
> ?> x = true and true
> => true
> >> x
> => true
>
> (this is what I expect, true and true = true)
>
> >> x = true and false
> => false
> >> x
> => true
>
> But what I've got here is "true and false" == false, but it assigns
> true to x. So true and false == false, but really == true... Have I
> lost my mind, should it do this? Does it do it for anyone else? It
> seems weird to me since the first example does what I expect, but the
> second doesn't...
>
> So now I'm reduced to doing something like:
> if (true and false) then x = true else x = false end
> which is kind of annoying, and not very ruby-esque IMO.
>
> Any advice appreciated!
>
> $ ruby -v
> ruby 1.8.5 (2006-08-25) [i486-linux]
>
> OS is Ubuntu 7.04.
>
> (I know, old ruby ver - its just the stock ubuntu one)
>
>
> THANKS!
> - Malcolm.
>
>


--

"Every child has many wishes. Some include a wallet, two chicks and a
cigar, but that's another story."

yermej

11/28/2007 6:26:00 AM

0

On Nov 27, 10:43 pm, Christian <chippers...@gmail.com> wrote:
> It should work if you use && instead of and. Not sure why that is, but
> I'm experencing the same thing as you when doing x = true and false,
> but it works as expected when using x = true && false.
>

This also happens in Perl and maybe other similar languages. The
English versions of the logical operators (and, or, not) have lower
precedence than the symbolic versions (&&, ||, !). Why? I don't know -
the languages were just designed that way.

Jeremy