wecui
Version:
一款基于Vue2.x版本的移动端web组件
35 lines (30 loc) • 934 B
JavaScript
var assert = require('./assert');
var isFunction = require('./isFunction');
var isType = require('./isType');
var Any = require('./Any');
module.exports = function match(x) {
var type, guard, f, count;
for (var i = 1, len = arguments.length; i < len; ) {
type = arguments[i];
guard = arguments[i + 1];
f = arguments[i + 2];
if (isFunction(f) && !isType(f)) {
i = i + 3;
}
else {
f = guard;
guard = Any.is;
i = i + 2;
}
if (process.env.NODE_ENV !== 'production') {
count = (count || 0) + 1;
assert(isType(type), function () { return 'Invalid type in clause #' + count; });
assert(isFunction(guard), function () { return 'Invalid guard in clause #' + count; });
assert(isFunction(f), function () { return 'Invalid block in clause #' + count; });
}
if (type.is(x) && guard(x)) {
return f(x);
}
}
assert.fail('Match error');
};