docs: function match(source, cases, isExec) {
        if (!isObj(cases)) throwErr('obj');
        if (isUdf(isExec)) isExec = true;
        var symbol = '__@fnMatch__';
        if (has(cases, source)) {
          symbol = source;
        } else if (has(cases, 'default')) {
          symbol = 'default';
        }
        var matched = cases[symbol];
        if (matched === '@next') {
          var ks = keys(cases), i = ks.indexOf(symbol) - 1;
          while (++i < ks.length) if (cases[ks[i]] !== '@next') { matched = cases[ks[i]]; break; }
        }
        if (isExec && isFun(matched)) {
          return len(matched) ? matched(source) : matched();
        } else {
          return matched === '@next' ? UDF : matched;
        }
      }