From: Subbu Date: 2008-03-22T22:29:55+09:00 Subject: Re: What does &&= do? On Mar 19, 10:08 pm, Ken Bloom wrote: > On Tue, 18 Mar 2008 20:26:22 -0500, Chad Perrin wrote: > > On Tue, Mar 18, 2008 at 03:09:56PM +0900, Subbu wrote: > >> I came across&&= while reading some code. I know what ||= does but not > >> this one. Can someone explain what it does? > > > The other answers are not wrong, but they may not be clear. > > > Just as ||= sets the value of something if it doesn't already have one, > >&&= sets the value of something if it *does* already have one. > > > irb(main):001:0> a = nil > > => nil > > irb(main):002:0> b = 'foo' > > => "foo" > > irb(main):003:0> a&&= b > > => nil > > irb(main):004:0> a = 'foo' > > => "foo" > > irb(main):005:0> b = 'bar' > > => "bar" > > irb(main):006:0> a&&= b > > => "bar" > > > Is that clear enough? > > Consider the following practical use I gave in my solution for Ruby Quiz > 144: > > DAYNAMES=%w[Sun Mon Tue Wed Thu Fri Sat] > DAYNAME=%r{Sun|Mon|Tue|Wed|Thu|Fri|Sat} > TIME=%r{[0-9]+} > > #find a single day, or a hyphenated range of days > clause.scan(/(#{DAYNAME})(?:(?=\s)|$)|(#{DAYNAME})-(#{DAYNAME})/) \ > do |single,start,finish| > > #convert data in single, start, and finish only if they're not nil > #though the&&= is not strictly necessary since Array#index() handles > #nil properly, some conversions like obj.to_i will fail badly > #if obj is nil > single&&= DAYNAMES.index(single) > start&&= DAYNAMES.index(start) > finish&&= DAYNAMES.index(finish) > > #do something with the ones that are not nil > > end > > -- > Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory. > Department of Computer Science. Illinois Institute of Technology.http://www.iit.edu/~kbloom1/ Thanks all for the detailed explanations. Really nice of you.