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 <pbailey@bna.com> 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/\.