# File lib/facets/core/kernel/set_with.rb, line 25
  def set_with(*args) #:yield:
    harg = args.last.is_a?(Hash) ? args.pop : {}

    unless args.empty?
      # if not assoc array, eg. [ [], [], ... ]
      # preserves order of opertation
      unless args[0].is_a?(Array)
        i = 0; a = []
        while i < args.size
          a << [ args[i], args[i+1] ]
          i += 2
        end
        args = a
      end
    end

    args.each do |k,v|
      self.send( "#{k}=", v )
    end

    harg.each do |k,v|
      self.send( "#{k}=", v )
    end

    yield self if block_given?

    self
  end