Our grid convenience method generates x, y (you can actually call them what you like) parameters that can be read in the block eg:-

grid(100, 100, 10, 10 ) { |x, y| code }

Where you are expected to provide code, the generated x and y values here will be the same as if you had created a 2D array (but we implement it as a single loop in java):-

(0..100).step(10) do |x|
  (0..100).step(10) do |y|
    ## your code here
  end
end

You can check this out by replacing code with

puts(format('x: %d, y: %d', x, y))