参数化的Module (parameterized modules)
Table of Contents

Tony Arcieri 写了一篇 《The black art of Erlang’s parameterized modules》。介绍了“参数化的module”(parameterized modules)这是一种“undocumented and unsupported feature”。

这种机制就好比,你有了 module 的一个 instance 。没错,就是在 oop 中非常常见的 instance (实例)。具体的,这种语法是这样的:

声明一个 parameterized module:

-module(foo, [Bar, Baz]).

这样声明的 module 会自动 export 一个 new 函数(多像 method),可以这么用:

Module = foo:new("Bar", "Baz"),
Module:quux().

that’s all.

一个“类”实例化多个“对象”,每个实例保持一个自己的“状态”,各个“对象”的“方法”在自己的“状态”中执行。——这是 OOP 下的“标准思维方法”。在 MochiWeb toolkit 中,就应用了这种语言机制来保存每一个request

这是一种 Erlang 的语法糖,很好的模拟了 OOP way 的编程思路。而实际上,通过参照作者自己写的“文档”。你会发现,他仍是用 Erlang 的标准方式(behaviour)来实现的,并没有从语法层面做出什么本质的改变。另外要注意的问题是它是“undocumented and unsupported”的特性,所以“use at your own risk”,非官方支持的特性,并没有什么保证。

顺便提一句,在 EShell 中,不能直接使用这个语法,而必须是从某个 module 来调用。

出处:http://erlang-china.org/study/parameterized-module.html

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License