    # 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