[ruby-talk:02384] Re: Iterator into array

From: Dave Thomas <Dave@...>
Date: 2000-04-07 19:54:47 UTC
List: ruby-talk #2384
matz@netlab.co.jp (Yukihiro Matsumoto) writes:

> I think it may be uglier, but for the idea:
> 
>   def iterated_values(method, *args)
>     result = []
>     method.call(*args) do |x|
>       result.push(x)
>     end
>     result
>   end
> 
>   p iterated_values([1,2].method(:each))

Do you ever sleep ;-)

Part of the motivation for this is the code examples in the
book. Right now is I write

  Let's look at an example:

  \begin{ruby}[comment]
  a = 1
  b = 2
  a + b
  \end{ruby}

the text gets preprocessed, and the final output will look something
like:

  Let's look at an example:

     a = 1
     b = 2
     a + b    ->  3


The preprocessor looks for statements that return a meaningful value,
captures that value, and adds it to the text.

However, when I'm documenting iterators, this is more difficult. I'd
like to be able to write something that gives.

  def fibUpTo(max)
    i1, i2 = 1, 1
    while i1 <= max
      yield i1
      i1, i2 = i2, i1+i2
    end
  end

  fibUpTo(20)   ->  [1,1,2,3,5,8,13]

Although I could wrap the methods, it would obscure the thing I'm
trying to show.

I was hoping I'd forgotten some obvious Ruby feature that would make
this easy. (How about it - a method that yields with no associated
block returns an array of yielded values?)


Regards


Dave


In This Thread