def map!
      __copy_on_write__
      return enum_for(:map!) unless block_given?
      __getobj__.each.with_index do |_, i|
        self[i] = yield(self[i])
      end
    end
def map!
      __copy_on_write__
      return enum_for(:map!) unless block_given?
      __getobj__.each.with_index do |_, i|
        self[i] = yield(self[i])
      end
    end
Invokes the given block once for each element of self,
 replacing the element with the value returned by the block.

 @yield [item] Gives each element in self to the block
 @yieldparam item Wrapped item in self
 @yieldreturn item to replace
 @return [CowProxy::Array] self if block given
 @return [Enumerator] if no block given