On Sat, 7 Jan 2006, Eero Saynatkari wrote: > On 2006.01.07 13:36, James Edward Gray II wrote: >> I have a group of classes, all implementing a parse?() class method. >> Calling parse?(token) will return the constructed object, if it can >> be parsed by this class, or false otherwise. >> >> I want to run a bunch of tokens through these classes, grabbing the >> first fit. For example: >> >> elements = tokens.map do |token| >> ClassA.parse?(token) or >> ClassB.parse?(token) or >> ClassC.parse?(token) >> end >> >> That works. Now can anyone give me a version of the middle section >> that doesn't require I call parse?() 50 times? I want something >> close to: >> >> elements = tokens.map do |token| >> [ClassA, ClassB, ClassC].find { |kind| kind.parse?(token) } >> end > > # Not tested > elements = tokens.map {|token| > [A, B, C].each {|kind| > result = kind.parse?(token) and break result > } > } fails when no kind parses. in this case the result will be [[A,B,C]] (the return of each...) regards. -a -- =============================================================================== | ara [dot] t [dot] howard [at] noaa [dot] gov | strong and healthy, | who thinks of sickness until it strikes like lightning? | preoccupied with the world, | who thinks of death, until it arrives like thunder? | -- milarepa ===============================================================================