simple, simple array question

P

Peter Bailey

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
 
S

Sam Rudd

[Note: parts of this message were removed to make it a legal post.]

I'm hardly any good at Ruby yet, but isn't "Test" already capitalized? Maybe
that's why it's nil?
 
A

Arlen Cuss

[Note: parts of this message were removed to make it a legal post.]

Hi,

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

`capitalize!' (with the exclamation mark on the end) actually changes `x'
itself:

Notice how `a' has a new value. Now, what if we try to capitalize! again?

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:

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 ...
=> ["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

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
 
A

Arlen Cuss

[Note: parts of this message were removed to make it a legal post.]

Hi,

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

Cheers,
Arlen
 
S

Sam Rudd

[Note: parts of this message were removed to make it a legal post.]

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

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

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
 
T

Tim Hunter

Peter said:
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
 
P

Peter Hickman

Peter said:
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
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.
 
P

Peter Bailey

Peter said:
Peter said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Staff online

Members online

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top