What does "||=" mean?

Hi there !

I don’t quite understand the following method (taken from RESTful
authentication) and can’t google the problem since the Goog won’t accept
the search term in question ("||=").

The method:

def current_user
@current_user ||= (login_from_session || login_from_basic_auth ||
login_from_cookie || :false)
end

My question:

I know “||” means a boolean “or”, but what does “||=” mean?
Can you translate the above method into a sentence?

Thank you very much for your help!
Tom

It’s an idiom for @current_user = @current_user || …

… Helps to keep it DRY

Thanks very much, idleFingers !

Btw, I like your nickname, seems like you’re Mr DRY in person… :slight_smile:
Tom

@current_user ||= some_expression means use @current_user if it’s
non-nil or
true; otherwise, assign some_expression to @current_user and then use
@current_user.

Hi –

On Mon, 14 Apr 2008, idleFingers wrote:

It’s an idiom for @current_user = @current_user || …

The most accurate representation of how it expands is:

@current_user || @current_user = x

(See ruby-talk for recent discussions of why this is, also:
http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case)

David


Rails training from David A. Black and Ruby Power and Light:
ADVANCING WITH RAILS April 14-17 New York City
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
See http://www.rubypal.com for details and updates!