On Sat, Jan 07, 2006 at 01:36:30PM +0900, 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
> 
> Except that I want the return result of parse?(), instead of the  
> class that took it.

do/end doesn't bind tightly enough for the assignment to 'elements'. Using {}
should work.

marcel
-- 
Marcel Molina Jr. <marcel / vernix.org>