def map!(&block)
      return to_enum(:map!) unless block_given?
      (0 ... self.length).each {
        |index|
        store(index, yield(fetch(index)))
      }
      self
    end
def map!(&block)
      return to_enum(:map!) unless block_given?
      (0 ... self.length).each {
        |index|
        store(index, yield(fetch(index)))
      }
      self
    end
In the first form, iterates over all elements of the object, yields them
 to the block given, and overwrites the element's value with the value
 returned by the block.

 In the second form, returns an Enumerator.

 The return value of the block must be the same kind of object as was
 yielded to the block. So, if yielded a Vec3, the block must return a Vec3.
 If yielded a Numeric, it must return a Numeric.

 call-seq:
   map! { |elem| block } -> self
   map! -> Enumerator