Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9228537
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 18, 20262026-06-18T05:20:57+00:00 2026-06-18T05:20:57+00:00

I understand the difference between || and or , or && and and ,

  • 0

I understand the difference between || and or, or && and and, but what I don’t understand is this:

Consider a method that returns the value of @var, or initializes it if @var is nil for false.

As I came from JavaScript background, I would write it like this, since || has higher precedence than =:

def some_method
  @var || (@var = MyClass.new)
end

or use or, since or has lower precedence:

def some_method
  @var or @var = MyClass.new
end

or more concisely:

def some_method
  @var ||= MyClass.new
end

But it so happened that this version also works:

def some_method
  @var || @var = MyClass.new
end

I search the web but didn’t find useful results.

Most of them just tell the difference between || and or.

The operator precedence table clearly says that || has higher precedence than =.

I can even do a = b || c = d and Ruby sees it as a = (b || (c = d)).

Is this behavior documented somewhere or is it some kind of magic in Ruby?

P.S. CoffeeScript also has the same behavior.

Update / Clarification: This question is not about short-circuit evaluation. But about operator precedence. Please let me rephrase it again:

If || has higher precedence than =, then why does ruby sees a || a = b as a || (a = b), but not (a || a) = b and raise a syntax error?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-18T05:20:59+00:00Added an answer on June 18, 2026 at 5:20 am

    Precedence becomes an issue only when there is ambiguity in the expression. In case of:

     @var || @var = MyClass.new
    

    there is no ambiguity. The assignment operator = makes sense only if there is a single variable on the left side of it (disregarding the complexities that arise from multiple assignment). It does not make sense to assign something to a variable called “@var || @var“. Therefore, there is no ambiguity. The only way to interpret the above expression is to interpret it as:

     @var || (@var = MyClass.new)
    

    Therefore, precedence is not an issue here.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I don’t understand the difference between let mapleader=, and let g:mapleader=, . I know
I can understand the difference between a signed char and an unsigned one. But
I don't understand the difference between A and B. A private static final CookieStore
I don't understand the difference between hex2dec and hex2num and their opposites in MATLAB.
I am trying to understand the difference between this: if (isset($_POST['Submit'])) { //do something
I have a problem that similar to : this question But I still don't
Possible Duplicate: Difference between Covariance & Contra-variance I'm trying to understand what covariance and
I am trying to understand difference between IQueryable, ICollection, IList & IDictionary interface which
I am trying to understand difference between IQueryable, ICollection, IList & IDictionary interface which
I understand that X & const x is redundant. It is not ok! But

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.