erlang parameterized modules

原创 2012年03月30日 11:03:43

最近在看mochiweb的源代码时, 发现一个有趣的用法:

当一个http请求到达时:
mochweb.erl:
%% @spec new_request({Socket, Request, Headers}) -> MochiWebRequest
%% @doc Return a mochiweb_request data structure.
new_request({Socket, {Method, {abs_path, Uri}, Version}, Headers}) ->
    mochiweb_request:new(Socket,
                         Method,
                         Uri,
                         Version,
                         mochiweb_headers:make(Headers));

但mochweb_request却没有new 方法. 跟人请教了才知道, 这是erlang中的parameterized module

简单介绍一下parameterized module

动机:


一个简单的例子: 假设http server中acceptor 进程A 读取数据包后, 需要创建一个request 对象C, 携带请求的状态进入业务进程B中进行处理.  parameterized module就是为了这样类似的需求而生的.


定义:

在module语句中使用如下格式: (A1, A2 为module的参数, 可以理解为面对对象编程中的饿对象的属性)

-module(ModuleName, [A1, A2, A3...])

使用:

M = name:new(A1, ..., An)

一个简单的例子:


一个简单的server例子, 其中, 传入的参数Mod需要有init/1, handle/2 cleanup/1 三个方法.

为了减少出错, 例子中的Mode可以用一个abstract module约束, 也就是说顶一个behavior:

Anti patterns:

过度使用parameterized modules, 会导致代码中很多的M:f(Args), 导致代码可读性很差, 所以并不是非常建议过度使用.实际erlang编程中,我们也是非常厌恶看到一个M:F(Args)的, 毕竟是运行时的东西, 很难判断.


总结:

parameterized modules给erlang增添了一点儿OOP的味道. 有意思.


Reference:

  1. Parameterized modules in Erlang
  2. parameterized-modules-in-erlang

Erlang Parameterized Module

转载:http://www.cnblogs.com/me-sa/archive/2012/02/16/Erlang0037.html 把Parameterized Module作为一个E...

Jenkins进阶系列之——03parameterized-trigger插件

说明:这个插件可以根据已经完成构建的结果,触发新Job或者传递参数。 官方说明:Parameterized Trigger Plugin 安装步骤: 系统管理→管理插件→可选插件→B...

Jenkins更改Parameterized Trigger Plugin以支持fail or abort结果

通常在Jenkins中,会使用 Build-timeout plugin

Parameterized unit tests with JUnit 4

前面已经分析过junit单元测试的用法,这篇详细学习junit4的参数化测试格式在测试类上面添加 @RunWith(Parameterized.class) 提供数据集合使用 @Parameter...

MySQL Stored Procedure Prepared Statement (Dynamic SQL) Parameterized

类似于SQL Server中的:sp_executesql sql server script: --- 涂聚文 20160906 IF EXISTS (SELECT * FROM sysob...

Dapper.net 在Parameterized时对于String的扩展

虽然Dapper通过提供的DbString本身支持对于String的指定Parameterized,但这方法明显不够,当Insert时,我们更希望是把一个Poco直接传递过去,而不是来new一个匿名函...
  • starfd
  • starfd
  • 2013年10月21日 12:30
  • 2550

Jenkins系列之—05 parameterized-trigger插件

说明:这个插件可以根据已经完成构建的结果,触发新Job或者传递参数。 官方说明:Parameterized Trigger Plugin 安装步骤: 系统管理→管理插件→可选插件...

Parameterized LMIs in control theory

  • 2009年09月06日 19:13
  • 500KB
  • 下载

jboss7.1 在modules中引入其他jar包

今天在用jboss7.1部署项目的时候,报了一个问题,如下: Exception in thread "Thread-138" java.lang.NoClassDefFoundError 16:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:erlang parameterized modules
举报原因:
原因补充:

(最多只允许输入30个字)