You know what your completely right. The block only will take what the yield method returns to it. So apparently when instantiating an array with that first argument setting a size limit for array, the constructor contains a yield method which yields each iteration of that size limit. And then the return value is passed back to the resutlt of the yield and that value is then idnexed into the array until the size limit has been reached.
On Feb 25, 3:15 pm, Valery Kvon <[email protected]> wrote: > On 26.02.2012, at 0:07, John Merlino wrote: > > > thanks for response but that was just an example and not really what > > my question was about. > > > Perhaps this is a better example: > > >>> Array.new(10) do |id| > > ?> "'#{(id + 1).to_s.rjust(2,"0")}'" > >>> end > > => ["'01'", "'02'", "'03'", "'04'", "'05'", "'06'", "'07'", "'08'", > > "'09'", "'10'"] > > > Why is "id" not the array instance. It obviously is an integer. > > Otherwise this would have failed with (id +1). > > I don't understand Why are you expecting an Array?? > > new(size=0, obj=nil)click to toggle source > new(array) > new(size) {|index| block } > Returns a new array. In the first form, the new array is empty. In the second > it is created with sizecopies of obj (that is, size references to the same > obj). The third form creates a copy of the array passed as a parameter (the > array is generated by calling to_ary on the parameter). In the last form, an > array of the given size is created. Each element in this array is calculated > by passing the element’s index to the given block and storing the return > value. > > There must be code inside like that: > > if block_given? > yield index > end -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

