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/