“状态与代码同行” 这是函数式编程语言的一个特点。
erlang 在抽象/描述一些复杂的数据对象时候。比较困难。
看到mochiweb的将Parameterized modules用得很oop。自己写了一下代码。
-module(oop, [Name]).
-export([get_name/0,new/1]).
new(Name) ->
instance(Name).
get_name() ->
Name.
{oop,"dp"}
2>DP:get_name().
"dp"
是不是很oop?
这里我就疑惑了。这里不就违反了“状态与代码同行” 这句话了。
不,不一定。如果instance 做了什么手脚的话。。
erlc +"'S'" oop.erl
vim oop.S
多余的我不截了,看到instance的实现:
{function, instance, 1, 2}.
{label,1}.
{line,[]}.
{func_info,{atom,oop},{atom,instance},1}.
{label,2}.
{test_heap,3,1}.
{put_tuple,2,{x,1}}.
{put,{atom,oop}}.
{put,{x,0}}.
{move,{x,1},{x,0}}.
return.
原来它是用tuple在缓存状态的。也就说这仅仅是一个语法糖的oop,不在编译器上面的。。
记录一下。
~~by dp