Ruby doesn't convert from String to int

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?

On 9/20/06, Yu Co [email protected] wrote:

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

Austin Z. wrote:

On 9/20/06, Yu Co [email protected] wrote:

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:inparseToDate’
from {}db/old_DB.rb:61:in callMethod' from {}db/old_DB.rb:47:incallMethod’

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

snacktime wrote:

On 9/20/06, Yu Co [email protected] wrote:

fill my date Object…

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.

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

On 9/20/06, Yu Co [email protected] wrote:

fill my date Object…

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.

Yu Co wrote:

This program works fine for me …
[email protected] ~ $ 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}”
[email protected] ~ $ ./td.rb
Date is 2002-05-05
[email protected] ~ $

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

[email protected] ~ $ 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
[email protected] ~ $

HTH,
Vance

On Sep 21, 2006, at 1:05 AM, Yu Co wrote:

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 G. II