defun
使用模式匹配写函数 (use pattern match define the function)
支持如下功能
- 多参函数
- 基本数据类型,数组,对象匹配
- 变量绑定
- 忽略参数
- 测试函数
使用(useage)
node
npm install defun --save
es5
var defun = defun;
>=es6
var fn = ; console //->[2,3]
brower
引入defun.js即可(未压缩15k) (import defun.js *size 15kb)
test
jasmine 做单元测试 文件存放路径 = /test/defun-jasmine-test.html =
demo
- 例子中使用了ecmascript6中的部分特性 非chrome浏览器需要做修改
例子存放于 = /demo = 文件夹
几段例子代码(snipets)
数组求和(sum)
var sum = ;;
快速排序(quick sort)
var sort = ;;
编写逻辑(logic)
- 如果是数组
** 空数组返回false
** 数组头部值为"string" 返回剩余数组 以字符串形式连接
** 其它情况数组以字符串形式连接
- 如果是对象
** type为string 返回对象的value属性值
** type为self 返回自身
- 其它情况返回false
var logicfn = ;
使用文档
基本匹配
defun(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
?函数(?function)
支持自定义函数来匹配 函数返回true表示匹配成功 否则匹配失败 array,object,date,number,string这些函数内置的 用来检查数据类型 自定义函数可传入defunWithFn 第二个参数在当前匹配范围内有效 也可通过 =defun.globalScope =使全局有效
也可直接使用全局函数
//全局有效defunglobalScope{return a=="test"}var fn = ;->true->false->'test'//当前fn有效var fn = ;