I'm getting keyboard input successfully, but I'm getting a string.  I
need to convert it to a number.  But ruby is a dynamic language?
What's happening please?

(Did I mention that this list is awesome?)

Here's what I have:

C:\code>
C:\code>
C:\code>dir
 Volume in drive C has no label.
 Volume Serial Number is 0491-510F

 Directory of C:\code

11/03/2007  12:15 PM    <DIR>          .
11/03/2007  12:15 PM    <DIR>          ..
11/03/2007  11:42 AM               827 Creature.rb
11/03/2007  11:35 AM               122 doFactorial.rb
11/03/2007  11:58 AM               449 Dragon.rb
11/03/2007  11:34 AM               114 factorial.rb
11/03/2007  11:32 AM               353 Hello.rb
11/03/2007  12:17 PM                71 input.rb
11/03/2007  12:25 PM               283 makeDragon.rb
               7 File(s)          2,219 bytes
               2 Dir(s)  28,967,956,480 bytes free

C:\code>
C:\code>type Dragon.rb
require 'Creature'

class Dragon < Creature
        life 1340       # tough scales
        strength 451    # bristling veins
        charisma 1020   # toothy smile
        weapon 939      # fire breath

        def toString()

                print "\n\n\nThis Dragon\n"
                print "-------------------"

                print "\nLife:\t\t"
                print life

                print "\nStrength:\t"
                print strength

                print "\nCharisma:\t"
                print charisma

                print "\nWeapon:\t\t"
                print weapon
                print "\n\n\n\n"
        end
end
C:\code>
C:\code>type Creature.rb
# The guts of life force within Dwemthy's Array
class Creature
# Get a metaclass for this class
def self.metaclass; class << self; self; end; end
# Advanced metaprogramming code for nice, clean traits
def self.traits( *arr )
return @traits if arr.empty?
# 1. Set up accessors for each variable
attr_accessor *arr
# 2. Add a new class method to for each trait.
arr.each do |a|
metaclass.instance_eval do
define_method( a ) do |val|
@traits ||= {}
@traits ||= {}
@traits[a] = val
end
end
end
# 3. For each monster, the `initialize' method
# should use the default number for each trait.
class_eval do
define_method( :initialize ) do
self.class.traits.each do |k,v|
instance_variable_set("@#{k}", v)
end
end
end
end
# Creature attributes are read-only
traits :life, :strength, :charisma, :weapon
end
C:\code>
C:\code>type factorial.rb
def fact(n)
        if n <= 1
                1
        else
                n * fact(n - 1)
        end
end
C:\code>
C:\code>type makeDragon.rb
require 'Dragon'
require 'factorial'

aDragon = Dragon.new

aDragon.toString

number=0
print "\n\n\nthe Dragon will calculate a factorial now."
puts "\nenter an integer    "
number=gets

# print "\n\n\n" + number + "\n\n"

print "Dragon replies\n\n"
print fact(number)
C:\code>
C:\code>
C:\code>makeDragon.rb



This Dragon
-------------------
Life:           1340
Strength:       451
Charisma:       1020
Weapon:         939






the Dragon will calculate a factorial now.
enter an integer
9
Dragon replies

./factorial.rb:2:in `<=': comparison of String with 1 failed
(ArgumentError)
        from ./factorial.rb:2:in `fact'
        from C:/code/makeDragon.rb:16

C:\code>
C:\code>




thanks,

Thufir