match.js
模式匹配 类似haskell中模式匹配功能 like haskell pattern match
使用(useage)
node
npm install matchs-js --save
es5
var match = match;
>=es6
var fn = ; console //->[2,3]
brower
只需引入match.js即可(未压缩15k) 无其它依赖
简介(desc)
模式匹配,是指将两个模式作为输入,计算模式元素之间语义上的对应关系的过程.
支持javascript中的基本数据类型,数组,对象,函数 以及相应的解构能力.
test
使用jasmine cdn 做单元测试 文件存放路径 ~ /test/match-jasmine-test.html ~
demo
- 例子中使用了ecmascript6中的部分特性 普通浏览器运行需要改为普通语法 推荐使用chrome
例子存放于 ~ /demo ~ 中 目前还不完善
几段例子代码(snipets)
数组求和
var sum = ;;
快速排序
var sort = ;;
编写逻辑
- 如果是数组
** 空数组返回false
** 数组头部值为"string" 返回剩余数组 以字符串形式连接
** 其它情况数组以字符串形式连接
- 如果是对象
** type为string 返回对象的value属性值
** type为self 返回自身
- 其它情况返回false
var logicfn = ;
使用文档
基本匹配
match(obj)的方式使用
key代表数据语意描述
val代表匹配结果 如下
var fn = ;->'number' //匹配"'777'"->'string' //匹配 "'str'"->'empty arr' //匹配 "'[]'"->'empty obj' //匹配"{}"->'else' //匹配"else"
多参数,和参数忽略
匹配多个参数意逗号隔开,_代表忽略这个参数
var fn = ;->1 //匹配 "1"->2 //匹配 "1,2"->3 //匹配 "1,2,3"->4 //匹配 "1,_,3" ->5 //匹配 "_,_,_"->"else"
变量绑定和数组对象解构
(1:2:[])代表匹配一个数组 第一个元素是1 第二个是2 (x:xs) 匹配一个数组 第一个元素绑定到x 剩余的绑定到xs
{a,b} 代表匹配一个对象 对象key为a的值绑定到a key为b的值绑定到b
var fn = ;-> //匹配 "(1:xs)"->23 //匹配 "(1:xs)"->223 //匹配 "(a:b:c:xs)"->2234 //匹配 "(a:b:c:xs)" ->22 //匹配 "(x:xs)"->1 //匹配 "{a,b:'b'}"->22->'aa'->100
?函数
支持自定义函数来匹配 函数返回true表示匹配成功 否则匹配失败 array,object,date,number,string这些函数内置的 用来检查数据类型 自定义函数可传入matchWithFn 第二个参数在当前匹配范围内有效 也可通过 =match.globalScope =使全局有效
也可直接使用全局函数
//全局有效matchglobalScope{return a=="test"}var fn = ;->true->false->'test'//当前fn有效var fn = ;