Binary Logic, Bug or Feature?

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.

Hi,

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...

Precedence.

x = true and false

is parsed as

(x = true) and false

not

x = (true and false)

              matz.

···

In message "Re: Binary Logic, Bug or Feature?" on Wed, 28 Nov 2007 13:33:36 +0900, "Malcolm Lockyer" <maxpenguin@gmail.com> writes:

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."

Of course, that makes perfect sense - I guess I am still getting used to
Ruby's awesome level of flexibility!

Thanks a lot for the quick reply matz, btw - big fan of your work :).

Also, thanks Christian - I will make use of the && in the future!

Thanks,
Malcolm.

···

On Nov 28, 2007 5:37 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:

Precedence.

x = true and false

is parsed as

(x = true) and false

not

x = (true and false)

                                                        matz.

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

···

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.