Newbie problem: String can't be coerced into Fixnum

J

Ja Bo

I am brand new to Ruby and I would greatly appreciate any help you guys
can provide!

If this is not the correct place to post them please let me know where I
should post these types of questions.

This very short program is just supposed to take today's date using t =
Time.now and calculating what year the user was born...

Code:
puts "How old are you?"
age = gets.chomp

puts name + " is " + age + " years old."

t = Time.now
born = t.year - age

puts "You were probably born in " + born + "."


Thank you!!!
 
J

Jon Garvin

You need to convert the age string to a number. If you're coming from
Perl, you're used to this being done for you magically. Ruby expects
you to do it. Try this...

born = t.year - age.to_i
 
D

dblack

Hi --

I am brand new to Ruby and I would greatly appreciate any help you guys
can provide!

If this is not the correct place to post them please let me know where I
should post these types of questions.

This very short program is just supposed to take today's date using t =
Time.now and calculating what year the user was born...

Code:
puts "How old are you?"
age = gets.chomp

puts name + " is " + age + " years old."

t = Time.now
born = t.year - age

The problem there is that t.year is an integer and age is a string.
You need to convert age:

born = t.year - age.to_i # to_i is "to integer"
puts "You were probably born in " + born + "."

And don't forget you can use string interpolation:

puts "You were probably born in #{born}."

Or even do it all at once:

puts "You were probably born in #{Time.now.year - age.to_i}."

:)


David

--
Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black)
(See what readers are saying! http://www.rubypal.com/r4rrevs.pdf)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)
 
D

dblack

Hi --

Hi --



The problem there is that t.year is an integer and age is a string.
You need to convert age:

born = t.year - age.to_i # to_i is "to integer"


And don't forget you can use string interpolation:

puts "You were probably born in #{born}."

Or even do it all at once:

puts "You were probably born in #{Time.now.year - age.to_i}."

:)

And, as the other responses reminded me, if you do it the way you
were, you have to convert born to a string:

puts "You were probably born in " + born.to_s + "."

With string interpolation, you don't; the interpolation automatically
does the conversion.


David

--
Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black)
(See what readers are saying! http://www.rubypal.com/r4rrevs.pdf)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)
 
C

Cesar Rabak

Ja Bo escreveu:
I am brand new to Ruby and I would greatly appreciate any help you guys
can provide!

If this is not the correct place to post them please let me know where I
should post these types of questions.

This very short program is just supposed to take today's date using t =
Time.now and calculating what year the user was born...

Code:
puts "How old are you?"
age = gets.chomp

puts name + " is " + age + " years old."

t = Time.now
born = t.year - age

puts "You were probably born in " + born + "."
You already got a lot of help from the Ruby interpreter. For grasping
the meaning of the error message, go to the "Pragmatic Programmer's
Guide" in Standard Types and search about the method #to_i.

HTH
 
L

lrlebron

You have to make sure that the variable types are correct. Here's a
revised version of your script

name = "My name" # This variable was missing in the original code

puts "How old are you?"
age = gets.chomp # gets are a string by default

puts name + " is " + age + " years old."

t = Time.now
born = t.year-age.to_i # convert age to an integer

puts "You were probably born in " + born.to_s + "." #convert born to a
string

Hope this helps

Luis
 

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

Members online

Forum statistics

Threads
473,733
Messages
2,569,440
Members
44,830
Latest member
ZADIva7383

Latest Threads

Top