From: Daniel Sheppard Date: 2005-09-26T10:50:26+09:00 Subject: Re: Overloading I don't quite understand your original problem (wouldn't the the ProcExtractor and the PatternLocationExtractor be two different things?), but in answer to your question, you can check the type of the thing with a case statement like so: case thing when Array : @arrays << thing when Proc : @procs << thing else raise "Crazy monkey, you gave me a #{thing.class}" end or, equivalently: if Array === thing @arrays << thing elsif Proc === thing @procs << thing else raise "Crazy monkey, you gave me a #{thing.class}" end -----Original Message----- From: Ben [mailto:benbelly@gmail.com] Sent: Monday, 26 September 2005 11:38 AM To: ruby-talk ML Subject: Overloading 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 ##################################################################################### This email has been scanned by MailMarshal, an email content filter. #####################################################################################