From: Pierre Barbier de Reuille
Date: 2006-01-08T01:28:00+09:00
Subject: Re: Iterator Fu Failing Me
Robert Klemme a �crit :
> 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
>
Well, looking at the documentation of ruby1.8, detect and find are
aliases ... is it specific to ruby1.8 or some newer/older version ?
Pierre