On Jul 7, 2006, at 1:09 PM, Graham Smith wrote:

> Hi,
>
> I have just started programming with Ruby and have run into the  
> following
> problem.
>
> I'm trying to work with 3 dimensional arrays and have run into a  
> problem
> dimensioning the array.
>
> a = [[[]]]
> a[0][0] = [ 0,1,2,3]
> a[0][1] = [ "zero", "one","two",three"]
>
> The above assignments work without a problem, but the following  
> assignment
> fails.
>
> a[1][0] = [ 4, 5, 6, 7]
> NoMethodError: undefined method `[]=' for nil:NilClass
>
> How do you dimension the number of elements in a multi-dimensional  
> array when
> the final number of elements in the array is not known.
>
> -- 
> Regards,
>
> Graham Smith
>

class Array
   def default(&proc)
      @default = proc
      self
   end

   alias_method :rb_array_indexing, :"[]"
   def [](index)
     if @default and index.kind_of? Integer and index >= length
        index.downto(length) do |i|
           self[i] = @default.call(i)
        end
     end
     rb_array_indexing(index)
   end
end

a = []
a.default { [] }

a[1][0] = "Hello"
a #=> [[], ["Hello"]]