一个类似的问题被问到了Erlang中的参数模块,那个问题是关于“什么”的。我的问题是关于“为什么”的。
OTP技术委员会 - 影响R16的决策 包含了有关此问题的委员会决定,但我不知道这个决定背后的原因。
Joe Armstrong在《Programming Erlang第二版》中详细介绍了带状态的模块,但我没有看到作者的态度。
如果我们阅读官方文档函数调用,我们可以看到这个特性被故意略过了。事实上,官方文件强烈反对使用这个特性,参见效率函数调用。如果是这样,为什么Joe Armstrong在他的书中提到了这个特性呢?
我认为这个特性很棒。正如上面的书所提到的,我的客户端代码可以像下面这样
Obj:find(Key),
Obj:is_key(Key),
那么,我们并不关心 Obj
是由 dict:new()
还是 gb_tree:new()
创建的,但遗憾的是,dict
和 gb_tree
没有共享一致的 接口,例如,我们有 gb_tree:lookup
而不是 gb_tree:find
。