Ruby doesn't convert from String to int

Y

Yu Co

Hi all,

I have the following peace of code:
arr = [5, 5, 2002]
date = Date.new(arr[2].to_i, arr[1].to_i, arr[0].to_i)

I need to convert the String elements in the array into int. I want to
do that with to_i, but this method returns me a Fixnum, thus I couldn't
fill my date Object...
Any suggestions?
 
A

Austin Ziegler

Hi all,

I have the following peace of code:
arr = [5, 5, 2002]
date = Date.new(arr[2].to_i, arr[1].to_i, arr[0].to_i)

I need to convert the String elements in the array into int. I want to
do that with to_i, but this method returns me a Fixnum, thus I couldn't
fill my date Object...
Any suggestions?

Yes. Try it again.

1. Your array contains Fixnum values already.
2. You're probably getting a different error.
3. Fixnum values are integer values.

If you have a problem, your real code and/or a backtrace would be useful.

-austin
 
Y

Yu Co

Austin said:
Hi all,

I have the following peace of code:
arr = [5, 5, 2002]
date = Date.new(arr[2].to_i, arr[1].to_i, arr[0].to_i)

I need to convert the String elements in the array into int. I want to
do that with to_i, but this method returns me a Fixnum, thus I couldn't
fill my date Object...
Any suggestions?

Yes. Try it again.

1. Your array contains Fixnum values already.
2. You're probably getting a different error.
3. Fixnum values are integer values.

If you have a problem, your real code and/or a backtrace would be
useful.

-austin

The error message looks like
{RUBY_HOME}/lib/ruby/1.8/date.rb:591:in `new': invalid date
(ArgumentError)
from {}db/old_DB.rb:98:in `parseToDate'
from {}db/old_DB.rb:61:in `callMethod'
from {}db/old_DB.rb:47:in `callMethod'
...

I am wondering why Ruby converts a String to Fixnum after calling to_i
 
S

snacktime

Austin said:
Hi all,

I have the following peace of code:
arr = [5, 5, 2002]
date = Date.new(arr[2].to_i, arr[1].to_i, arr[0].to_i)

I need to convert the String elements in the array into int. I want to
do that with to_i, but this method returns me a Fixnum, thus I couldn't
fill my date Object...
Any suggestions?

Yes. Try it again.

1. Your array contains Fixnum values already.
2. You're probably getting a different error.
3. Fixnum values are integer values.

If you have a problem, your real code and/or a backtrace would be
useful.

-austin

The error message looks like
{RUBY_HOME}/lib/ruby/1.8/date.rb:591:in `new': invalid date
(ArgumentError)
from {}db/old_DB.rb:98:in `parseToDate'
from {}db/old_DB.rb:61:in `callMethod'
from {}db/old_DB.rb:47:in `callMethod'
...

I am wondering why Ruby converts a String to Fixnum after calling to_i

Because that's what to_i does? An integer IS a Fixnum. Also, the
code you posted as not working works just fine, which is why the
subtle hint by Austin to post the *real* code that is actually
breaking. Chances are you array doesn't contain what you assume it
does.
 
Y

Yu Co

snacktime said:
Because that's what to_i does? An integer IS a Fixnum. Also, the
code you posted as not working works just fine, which is why the
subtle hint by Austin to post the *real* code that is actually
breaking. Chances are you array doesn't contain what you assume it
does.

All right, then I'm wondering why the array doesn't accept Fixnum as an
argument...
 
V

Vance Heron

Yu said:
Hi all,

I have the following peace of code:
arr = [5, 5, 2002]
date = Date.new(arr[2].to_i, arr[1].to_i, arr[0].to_i)

I need to convert the String elements in the array into int. I want to
do that with to_i, but this method returns me a Fixnum, thus I couldn't
fill my date Object...
Any suggestions?
This program works fine for me ...
heron@ka6toe ~ $ cat td.rb
#! /usr/bin/env ruby
#
require 'date'
arr = [5,5,2002]
date = Date.new(arr[2], arr[1], arr[0])
puts "Date is #{date}"
heron@ka6toe ~ $ ./td.rb
Date is 2002-05-05
heron@ka6toe ~ $

Another option is to use the * (splat) operator as follows:

heron@ka6toe ~ $ irb
irb(main):001:0> require 'date'
=> true
irb(main):002:0> arr = [5,5,2002]
=> [5, 5, 2002]
irb(main):003:0> date = Date.new(*arr.reverse)
=> #<Date: 4904799/2,0,2299161>
irb(main):004:0> date.to_s
=> "2002-05-05"
irb(main):005:0> quit
heron@ka6toe ~ $


HTH,
Vance
 
J

James Edward Gray II

All right, then I'm wondering why the array doesn't accept Fixnum
as an
argument...

You are having trouble with your assumptions. A Fixnum is an
Integer. Arrays accept Integers. Your sample code posted runs
without modification and thus isn't broken at all.

You real code has a bug, but you will need to show us that code if
you want us to help fix it.

James Edward Gray II
 

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

No members online now.

Forum statistics

Threads
473,774
Messages
2,569,599
Members
45,163
Latest member
Sasha15427
Top