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