On 5/29/07, Robert Klemme <shortcutter / googlemail.com> wrote:
> On 29.05.2007 13:07, Jano Svitok wrote:
> > On 5/29/07, Jon Harrop <jon / ffconsultancy.com> wrote:
> >> Michael Fellinger wrote:
> >> > some people use _ as a temporary meaningless variable, just a
> >> > throw-away so to say.
> >> > In this case something like
> >> >
> >> > hash = {:a => :b, :c => :d}
> >> >
> >> > and you are not interested in the :b and :d
> >> >
> >> > hash.each do |key, _|
> >> >   p key
> >> > end
> >> >
> >> > I'm not necessarily a friend of this technique, but it seems easy on
> >> > the minds of some people.
> >>
> >> Right, this is exactly what I guessed it was doing (it is the same in
> >> SML/OCaml/F#) but what value was being thrown away in the Ruby program
> >> and
> >> where did it come from?
> >>
> >>   (1..n).inject(x) { |acc, _| yield(acc) }
> >>
> >> --
> >> Dr Jon D Harrop, Flying Frog Consultancy
> >> The F#.NET Journal
> >> http://www.ffconsultancy.com/products/fsharp_journal/?usenet
> >
> > inject takes a block with two parameters. classic example is a sum of an
> > array:
> >
> > array.inject(0) {|sum, item| sum + item }
> >
> > so, in this case, item is not needed, so it is replaced by a variable
> > with name of "_"
> > that by convention means "temporary", "throw away"
> >
> > it can be anything else:
> > (1..n).inject(x) { |acc, i_dont_need_this| yield(acc) }
>
> Actually, #inject does not really make sense in this case.  All that
> happens here is that some value is yielded n times to a block.  That
> could have been done much more concise like this:
>
> n.times { yield x }
>
> Kind regards
>
>         robert
>
>

Actually, If it does what I think it does, the inject is needed
because as we know, inject sets the value returned from the block as
the accumulator for the next round.  Therefore:
>> nest(2) {|x| p x; [22] }
2
[22]
=> [22]


-- 
Chris Carter
concentrationstudios.com
brynmawrcs.com