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 0037] Erlang Parameterized Module

把Parameterized Module作为一个Erlang的语法特性而不扯到OOP上去,可能更好理解: ) 本文回答Erlang Parameterized Module是什么?有什么用?怎么实...
  • ligaorenvip
  • ligaorenvip
  • 2012年08月30日 10:28
  • 376

Erlang Parameterized Module

转载:http://www.cnblogs.com/me-sa/archive/2012/02/16/Erlang0037.html 把Parameterized Module作为一个E...
  • zhangxinrun
  • zhangxinrun
  • 2012年10月08日 17:23
  • 1228

基于 Erlang/OTP 搭建TCP服务器

这两天在研究erlang如何构建TCP服务器,看到一篇文章,基于Erlang OTP构建一个TCP服务器,里面讲述了两种混合型Socket的实现方法,着实让人欢欣鼓舞。本文将结合这两篇文章,继续讨论E...
  • cwqcwk1
  • cwqcwk1
  • 2013年10月22日 21:50
  • 5145

The type JComboBox is not generic; it cannot be parameterized with arguments <String>错误

之前的项目,用eclipse写的可以运行,后来用myeclipse后发现一堆红叉,原来是jdk用的不对,换为jdk1.7就OK了...
  • u012453607
  • u012453607
  • 2015年01月18日 20:32
  • 1991

Junit4 Parameterized参数化和自动注解一起使用

1.@BeforeClass 和 @AfterClass 对于那些比较“昂贵”的资源的分配或者释放来说是很有效的,因为他们只会在类中被执行一次。相比之下对于那些需要在每次运行之前都要初始化或者在运行之...
  • lan12334321234
  • lan12334321234
  • 2017年04月11日 10:53
  • 115

Parameterized tests

Parameterized继承自Suite。Parameterized是在参数上实现了Suite,修饰一个测试类,然后提供多组构造函数的参数用于测试不同场景。 import java.util.Arr...
  • qianbibi
  • qianbibi
  • 2015年02月05日 14:24
  • 753

unittest参数化parameterized

github:https://github.com/wolever/parameterizedimport unittest from nose_parameterized import parame...
  • u010895119
  • u010895119
  • 2017年07月05日 16:04
  • 461

the type List is not generic; it cannot be parameterized with arguments<T>解决办法

1.检查导入的包是否正确    应该为import java.util.List;    而不是import.java.awt.List; 2.如果仍然不正确检查一下项目的java compil...
  • wangbinasas
  • wangbinasas
  • 2015年08月09日 10:52
  • 1021

The type List is not generic; it cannot be parameterized with arguments<T>

今天写一个返回list的接口,出现了如下报错信息, The type List is not generic; it cannot be parameterized with arguments ...
  • a18716374124
  • a18716374124
  • 2017年08月31日 10:45
  • 455

eclipse编译Syntax error, parameterized types are only available if source level is 5.0

在myeclipse里引入新项目的时候会报如下错误: 在使用泛型的地方提示: Multiple markers at this line - Syntax error, param...
  • xinyuan_java
  • xinyuan_java
  • 2015年09月17日 14:33
  • 975
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:erlang parameterized modules
举报原因:
原因补充:

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