What does "||=" mean?

3,631 views
Skip to first unread message

Tom Ha

unread,
Apr 14, 2008, 9:44:55 AM4/14/08
to rubyonra...@googlegroups.com
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
--
Posted via http://www.ruby-forum.com/.

idleFingers

unread,
Apr 14, 2008, 9:51:45 AM4/14/08
to Ruby on Rails: Talk
It's an idiom for @current_user = @current_user || ......

.. Helps to keep it DRY

Craig Demyanovich

unread,
Apr 14, 2008, 9:55:04 AM4/14/08
to rubyonra...@googlegroups.com
@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.

Tom Ha

unread,
Apr 14, 2008, 9:59:09 AM4/14/08
to rubyonra...@googlegroups.com
Thanks very much, idleFingers !

Btw, I like your nickname, seems like you're Mr DRY in person... :-)

David A. Black

unread,
Apr 14, 2008, 9:59:29 AM4/14/08
to Ruby on Rails: Talk
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!

Reply all
Reply to author
Forward
0 new messages