def <<(arg)
      raise ExtraArgumentError.new(@name) unless more_args?

      if @arg_names.size > @args.size
        name = @arg_names[@args.size]
        if @max_arg_count == -1 && @arg_names.size == @args.size + 1
          @args[name] = [arg]
        else
          @args[name] = arg
        end
      elsif !@arg_names.empty? && @max_arg_count == -1
        @args[@arg_names.last] << arg
      else
        @args[@args.size] = arg
      end
    end
def <<(arg)
      raise ExtraArgumentError.new(@name) unless more_args?

      if @arg_names.size > @args.size
        name = @arg_names[@args.size]
        if @max_arg_count == -1 && @arg_names.size == @args.size + 1
          @args[name] = [arg]
        else
          @args[name] = arg
        end
      elsif !@arg_names.empty? && @max_arg_count == -1
        @args[@arg_names.last] << arg
      else
        @args[@args.size] = arg
      end
    end
Adds an argument to this parameter. Arguments can be accessed inside the
 application code using the args method.

 @param [String] arg The argument to add to the supplied arguments of this
        parameter
 @raise [ExtraArgumentError] if the parameter has all required arguments
        supplied and does not take optional arguments
 @return [Array] The supplied arguments of this parameter
 @see #[]
 @see #args
 @since 0.3.0