set(name, index, value, force) {
      const o = this,
        v = o[name],
        mod = o[CACHE];
      if (index != null && index >= 0) {
        if (v[index] !== value || force) {
          v[index] = value;
          mod[index + ':' + name] = -1;
          mod[name] = -1;
        }
      } else if (v !== value || force) {
        o[name] = value;
        mod[name] = isArray(value) ? 1 + value.length : -1;
      }
      return o;
    }
Set a parameter value. If the parameter value changes, the parameter
will be recorded as modified.
@param {string} name - The parameter name.
@param {number} index - The index into an array-value parameter. Ignored if
  the argument is undefined, null or less than zero.
@param {*} value - The parameter value to set.
@param {boolean} [force=false] - If true, records the parameter as modified
  even if the value is unchanged.
@return {Parameters} - This parameter object.