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...

Parameterized Complexity

  • 2015-08-06 20:33
  • 192KB
  • 下载

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

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

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

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

Parameterized Trigger Plugin 2.25

  • 2014-06-05 07:33
  • 1.16MB
  • 下载

Parameterized unit tests with JUnit 4

前面已经分析过junit单元测试的用法,这篇详细学习junit4的参数化测试格式在测试类上面添加 @RunWith(Parameterized.class) 提供数据集合使用 @Parameter...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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