Home > study > [转]参数化的module

[转]参数化的module

November 6th, 2007 :: jackyz

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 来调用。

study

  1. mryufeng
    November 6th, 2007 at 14:36 | #1

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

  2. jackyz
    November 8th, 2007 at 09:09 | #2

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

  3. dogstar
    November 8th, 2007 at 21:00 | #3

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

  4. crackcell
    October 11th, 2009 at 00:22 | #4

    多一种选择也不错嘛,呵呵

  5. October 12th, 2009 at 12:14 | #5

    请参看模块参数化的剖析 http://mryufeng.javaeye.com/blog/477376

  1. March 15th, 2009 at 21:14 | #1
  2. November 19th, 2009 at 10:20 | #2