cowboy_http.erl里面的date1/2 启示:

以前一般写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).

这个看上去不是很直观,但是在多个组合的调用下却是异常的好用!每一个函数都可以自定义下一要执行的函数。

[Erlang28]使用匿名函数灵活组合不同的case的更多相关文章

  1. 内置函数&匿名函数

    1.内置函数     Built-in Functions     abs() dict() help() min() setattr() all() dir() hex() next() slice ...

  2. python笔记4 内置函数,匿名函数.递归函数 面向对象(基础, 组合,继承)

    内置函数 eval和exec eval :执行字符串中的代码并将结果返回给执行者,有返回值 exec:执行字符串中的代码,往往用于执行流程语句,没有返回值. s1 = '1+2' s2 = 'prin ...

  3. python语言(五)匿名函数、读写excel、操作数据库、加密、redis操作

    一.匿名函数 递归:就是调用自己 def func(): num = int(input('num:')) if num % 2 ==0: print('是偶数') return else: func ...

  4. Python---12函数式编程------12.3匿名函数&装饰器&偏函数

    一.匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f( ...

  5. Two---python循环语句/迭代器生成器/yield与return/自定义函数与匿名函数/参数传递

    python基础02 条件控制 python条件语句是通过一条或多条语句的执行结果(Ture或者False)来执行的代码块 python中用elif代替了else if,所以if语句的关键字为:if- ...

  6. 巧用javascript对象属性,向事件绑定的匿名函数内传递循环控制变量的值

    遇到一个需要向匿名函数传递循环控制变量的问题,我受到园子里这篇文章的启发[笔记]js获取当前点击元素的索引,解决了这个问题.现在把代码贴出来,以防止自己忘记. if ($('#labModal').l ...

  7. 一篇关于匿名函数(function(){})()不错的文章

    代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他 ...

  8. Javascript闭包和C#匿名函数对比分析

    C#中引入匿名函数,多少都是受到Javascript的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ...

  9. JavaScript中的匿名函数及函数的闭包

    1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...

随机推荐

  1. 无法正确解析FreeMarker视图

    在使用SpringMVC处理FreeMarker的时候,出现了无法解析视图名的问题,报的异常说明的也非常清楚就是不能解析视图 这个free就是一个FreeMarker的模板名,它的完整路径是/WEB- ...

  2. Lifecycle of an ASP.NET Web API Message

    ASP.NET Web API, as we know now, is a framework that helps build Services over HTTP. Web API was int ...

  3. python之数据驱动ddt

    下载ddt并安装 Pip install ddt 或者官网下载安装 http://ddt.readthedocs.io/en/latest/ https://github.com/txels/ddt ...

  4. nginx正向代理访问百度地图API

    正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代 ...

  5. Pthreads 《并行程序设计导论》的补充代码

    ▶ 关于单链表的访问,插入结点和删除结点操作,并且将其推广到多线程中去. ● 代码,通用的随机数生成 // my_rand.h #ifndef _MY_RAND_H_ #define _MY_RAND ...

  6. [Z] Windbg以及vs debug使用

    Windbg 一篇中国人写的质量非常高的Windbg文章:篇中国人写的质量非常高的Windbg文章: http://www.yiiyee.cn/Blog/windbg/ code project上的W ...

  7. [代码]multimap员工分组案例

    案例要求: //multimap 案例//公司今天招聘了 5 个员工,5 名员工进入公司之后,需要指派员工在那个部门工作//人员信息有: 姓名 年龄 电话 工资等组成//通过 Multimap 进行信 ...

  8. Python实践练习:疯狂填词

    题目 创建一个疯狂填词(Mad Libs)程序,它将读入文本文件,并让用户在该文本文件中出现 ADJECTIVE.NOUN.ADVERB 或 VERB 等单词的地方,加上他们自己的文本. 例如,一个文 ...

  9. Rhythmk 学习 Hibernate 01 - maven 创建Hibernate 项目之 增删改查入门

    1.环境: Maven :3.1.1 开发工具:Spring Tool Suite 数据库 : Mysql  5.6 2.项目文件结构 文件代码: 2.1 .pom.xml <project x ...

  10. C#串口编程测试收发

    原文:http://www.cnblogs.com/vsdot/archive/2013/04/23/3263348.html   基本传递方法:RS232传输要有1位起始位,8位数据位.1位校验位( ...