Simple, simple array question

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

I’m hardly any good at Ruby yet, but isn’t “Test” already capitalized?
Maybe
that’s why it’s nil?

Hi,

I’m so tired, so here’s a succinct answer:

capitalize!' (with the exclamation mark on the end) actually changesx’
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 becausea’ didn’t change. With your example, This' is already capitalized, so no change occurred. What you really want isx.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

Peter B. wrote:

What’s with the “nil?”

capitalize! returns nil when the string is already capitalized. Use
capitalize instead. Also, you don’t need the puts inside the block.

stuff.collect { |x| x.capitalize }
puts stuff

Sorry, I meant “This” already capitalized. Try it lowercase?

Hi,

And excuse my top-posting, I really am tired!

Cheers,
Arlen

Peter B. wrote:

Is
A
Test

Program exited with code 0

What’s with the “nil?”

Thanks,
Peter

This is because you are using collect where, I suspect, you want to use
each or perhaps drop the puts.

irb(main):004:0> stuff = [ “This”, “is”, “a”, “test” ]
=> [“This”, “is”, “a”, “test”]
irb(main):005:0> stuff.collect{|x| x.capitalize }
=> [“This”, “Is”, “A”, “Test”]
irb(main):006:0>

Maybe that is what you want.

Peter H. wrote:

Peter B. wrote:

Is
A
Test

Program exited with code 0

What’s with the “nil?”

Thanks,
Peter

This is because you are using collect where, I suspect, you want to use
each or perhaps drop the puts.

irb(main):004:0> stuff = [ “This”, “is”, “a”, “test” ]
=> [“This”, “is”, “a”, “test”]
irb(main):005:0> stuff.collect{|x| x.capitalize }
=> [“This”, “Is”, “A”, “Test”]
irb(main):006:0>

Maybe that is what you want.

Thanks all you guys. Yeh, I feel kinda’ dumb. That first word was
already capitalized. Duh.

Cheers,
-Peter

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs