I'm a C++ programmer learning Ruby.  I would like to make a class that
extracts patterns from a file, and returns an array of values.  I
have:

class Extracter
  def initialize(pattern, location)
    @pattern = pattern
    @loc = location
  end
  def extract(stream)
    pats = Array.new
    stream.each_line do |line|
      if line =~ @pattern then
        pats << $~[@loc]
      end
    end
    pats
  end
end

cppFile = File.new("foo.cpp")
incEx = Extracter.new(/#include\s*[<"](.*)[>"]/, 1)
includesArr = incEx.extract(ccpFile)

So far, so good.  If not, let me know what I've done wrong.  Next, I
want to extend the Extracter class to hold an array of patterns and
locations, or a Proc parser that will return the interesting value
(this is for lines that are tougher than regexp).  How do I create a
constructor that will take different types and create the appropriate
arrays internally?  The options I see are:

1) Call .class.to_s on each parameter to match the type:
        "pattern.class.to_s =~ /Array/ then # I have an array of regexp
2) Use a non-trvial data structure to map symbols to types
3) Use different functions to fill out my extracter:
        def add_array
        def add_parser

What am I missing?  Am I doing this entirely wrong for Ruby?

-Ben