Erlang-China

erlang 中文社区

[转]参数化的module


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

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

声明一个 parameterized module:

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

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

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

that’s all.

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

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

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





Comments



1
Author:  mryufeng | Date:  November 6, 2007 | Time:  2:36 pm

这个是艺术层面的技术 感觉掌握不了。

2
Author:  jackyz | Date:  November 8, 2007 | Time:  9:09 am

@mryufeng
这是很 OOP way 的语法糖,与 Erlang 所主导的 COP way 很不相同。不过对于 Java/Ruby/… 阵营的同学们来说,看着这样的 new() 就会感觉很亲切。从语言推广的角度来看,也许会有助于他们降低对于 Erlang 的学习曲线也说不定。

3
Author:  dogstar | Date:  November 8, 2007 | Time:  9:00 pm

使用一门语言就要接受他的语法,应往别的语言上套没啥好结果。 :)



Write a Comment

Note: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>