From: Arlen Cuss Date: 2008-04-08T22:42:23+09:00 Subject: Re: simple, simple array question ------=_Part_25920_24763201.1207662137722 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, I'm so tired, so here's a succinct answer: `capitalize!' (with the exclamation mark on the end) actually changes `x' itself: >> a = "boo" => "boo" >> a.capitalize! => "Boo" >> a => "Boo" >> Notice how `a' has a new value. Now, what if we try to capitalize! again? >> a.capitalize! => nil >> a => "Boo" >> It returns nil. `a' is still "Boo" - the thing is, capitalize! returns nil because `a' didn't change. With your example, `This' is already capitalized, so no change occurred. What you really want is `x.capitalize' - it just returns the value of x capitalized, whatever that is: >> a = "boo" => "boo" >> a.capitalize => "Boo" >> a => "boo" >> It also doesn't change `x' - not that it would matter much in your given example. Also, though it's probably just your test, but note that you're not saving the result of `collect' anywhere. As an example: >> a = %w(This is a test.) => ["This", "is", "a", "test."] >> a = %w(This is a test) => ["This", "is", "a", "test"] >> a.collect {|x| x.capitalize} => ["This", "Is", "A", "Test"] We get this answer, but ... >> a => ["This", "is", "a", "test"] It's still lowercase! So we can use the collect! method to alter the original: >> a.collect! {|x| x.capitalize} => ["This", "Is", "A", "Test"] >> a => ["This", "Is", "A", "Test"] >> Or you could assign the result of `collect'. And I'm out for the night. HTH, Arlen On Tue, Apr 8, 2008 at 11:35 PM, Peter Bailey wrote: > Hi, > I need to cap-and-lowercase words in strings of XML data. Why is this > happening in this test? > > stuff = [ "This", "is", "a", "test" ] > stuff.collect { |x| puts x.capitalize! } > > I get: > > nil > Is > A > Test > > Program exited with code 0 > > What's with the "nil?" > > Thanks, > Peter > -- > Posted via http://www.ruby-forum.com/. > > ------=_Part_25920_24763201.1207662137722--