[Erlang_Question28]使用匿名函数灵活组合不同的case
2015-01-19 13:27
260 查看
cowboy_http.erl里面的date1/2 启示:
以前一般写case里都是这样子:
如果时间格式里month格式有3种(month1~month3) timer格式也有(timer1~timer3)
那么组合就有9种,要写成16个函数(date1~date9),最可怕的还是要为这9个函数取一个非常贴切的函数名,这简直无情啊!
所以我们仿照cowboy_http.erl里面匿名函数的写法:
更进一步:假如我们现在只需要MonthFun 和TimerFun,不需要ValidFun函数,怎么办?
可以把month,timer,Valid都改写成date模式,让它更加灵活。
调用如下:
这个看上去不是很直观,但是在多个组合的调用下却是异常的好用!每一个函数都可以自定义下一要执行的函数。
以前一般写case里都是这样子:
date1(Date) -> case month1(Date) of {error,badarg} -> {error,badarg}; {ok,MonthData} -> case timer1(MonthData) of {error,badarg} -> {error,badarg}; {ok,TimerData} -> valid_date(TimerData) end end.
如果时间格式里month格式有3种(month1~month3) timer格式也有(timer1~timer3)
那么组合就有9种,要写成16个函数(date1~date9),最可怕的还是要为这9个函数取一个非常贴切的函数名,这简直无情啊!
所以我们仿照cowboy_http.erl里面匿名函数的写法:
date(Date,MonthFun,TimerFun,ValidFun) -> case MonthFun(Date) of {error,badarg} -> {error,badarg}; {ok,MonthData} -> case TimerFun(MonthData) of {error,badarg} -> {error,badarg}; {ok,TimerData} -> ValidFun(TimerData) end end.
更进一步:假如我们现在只需要MonthFun 和TimerFun,不需要ValidFun函数,怎么办?
可以把month,timer,Valid都改写成date模式,让它更加灵活。
date(Date,MonthFun) -> MonthFun(Date). month(MonthData,[]) -> deal_month(MonthData); month(MonthData,Fun) -> case deal_month(MonthData) of {error,badarg} -> {error,badarg}; {ok,MonthData1} -> Fun(MonthData1) end. timer(TimerData,[]) -> deal_timer(TimerData); timer(TimerData,Fun) -> case deal_timer(TimerData) of {error,badarg} -> {error,badarg}; {ok,TimerData1} -> Fun(TimerData1) end.
调用如下:
date(Date, fun(DateTemp) -> month(DateTemp, fun(Month1) -> timer(Month1) end) end).
这个看上去不是很直观,但是在多个组合的调用下却是异常的好用!每一个函数都可以自定义下一要执行的函数。
相关文章推荐
- 如何使用不同参数组合生成独立的TestCase函数(Python)
- Ext.get() 和 Ext.query() 组合使用 实现 最灵活的取元素方式
- 函数调用规则的不同对回调函数使用的影响
- Nhibernate Hql查询使用 sum 和 case 组合
- Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
- 使用指针类型参数和使用指针引用类型参数在函数内部用new给参数分配空间的不同结果
- SQL SERVER2000教程-第五章 处理数据 第十七节 使用CASE函数格式进行条件查询
- 【原译】使用匿名函数增强程序的可读性
- [转]可爱的 Python:: 使用 itertools 模块中的组合函数
- 交换函数所使用的三种不同参数分析
- Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
- C_在switch-case语句中使用exit()函数求非闰年的每月天数
- 在Sql的where中使用case进行不同字段筛选|Case的2种使用方法和一种少为人知的用途
- 类的组合和类的函数友元和类友元使用
- Nhibernate Hql查询使用 sum 和 case 组合
- 使用多个事件处理函数,组合事件处理函数的局限
- C程序使用不同函数调用约定调用汇编子过程
- 使用CreateProcess函数实现隐秘的程序调用之二:使用匿名管道
- SQL集合函数中case when then 使用技巧
- VC 6中使用不同调用规范的函数在符号文件里的表示方式