Binary Logic, Bug or Feature?

Discussion in 'Ruby' started by Malcolm Lockyer, Nov 28, 2007.

  1. 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.
     
    Malcolm Lockyer, Nov 28, 2007
    #1
    1. Advertising

  2. On Nov 28, 2007 5:37 PM, Yukihiro Matsumoto <> wrote:
    >
    > Precedence.
    >
    > x = true and false
    >
    > is parsed as
    >
    > (x = true) and false
    >
    > not
    >
    > x = (true and false)
    >
    > matz.
    >
    >


    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.
     
    Malcolm Lockyer, Nov 28, 2007
    #2
    1. Advertising

  3. Malcolm Lockyer

    yermej Guest

    On Nov 27, 10:43 pm, Christian <> 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
     
    yermej, Nov 28, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. GDan
    Replies:
    1
    Views:
    621
    Jonathan Bromley
    Jan 18, 2008
  2. Replies:
    9
    Views:
    349
    Jorgen Grahn
    Mar 31, 2008
  3. Weng Tianxiang
    Replies:
    17
    Views:
    868
    Weng Tianxiang
    Jun 17, 2009
  4. spike
    Replies:
    8
    Views:
    1,486
    Steve Holden
    Feb 9, 2010
  5. robic0
    Replies:
    7
    Views:
    105
    Samwyse
    Jan 24, 2006
Loading...

Share This Page