From: Robert Klemme Date: 2006-01-08T01:13:00+09:00 Subject: Re: Iterator Fu Failing Me Bob Hutchison wrote: > On Jan 6, 2006, at 11:36 PM, James Edward Gray II wrote: > >> 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. > > Why not: > > elements = tokens.map do |token| > result = nil > [ClassA, ClassB, ClassC].find { |kind| result = kind.parse?(token) } > end Because this won't return the proper value from the block. You need at least to add a line with "result" after the #find. :-) And then it's much more inelegant than using #detect. :-) Kind regards robert