From: Fredrik Jagenheim Date: 2003-09-09T17:59:00+09:00 Subject: Need a ruby approach Hi, First a little warning, this post is more of a rubberducking session than a proper question. I have a rather trivial problem, but since I'm spending 8 hours a day cursing C++ and far coding in Ruby, I'm afraid I can't think of a proper Ruby solution, and instead come up with 'this is how it could've been done in C++'-solutions. The problem: I have a data set. I'd like to see if this data set fullfills certain properties, so I did a couple of classes which will do the matching against these properties: def MatchA def MatchA.match?(set) # Complex calculations on set true end end def MatchB def MatchB.match(set) # More complex calculations on set true end end Then I'd just do: puts "It matched A" if MatchA.match?(set) puts "It matched B" if MatchB.match?(set) Ok, but now I have 50 of these match classes, so I figured I should make an array of them: array_of_match_objects.each{ |match| puts "It matched #{match.name}" if match.match(set) } I would have to change the methods from class to object first, I guess... Anyway, then I started to think about using a superclass for these classes and use Ruby introspection to find all the subclasses and call match from there. That's when I realized there must be simpler solution I just can't see... Perhaps extending the set-class with the methods; def MatchB def match_b? # Complex calculation end end set.extend(MatchB) puts "Matched B" if set.match_b? It probably be the best way OO-wise, since it's a property of the Set. Or am I really wrong here? //F