有人问过类似的问题 Parameterised Modules in Erlang ,它是关于“什么”。我的问题是关于“为什么”?
OTP Technical Board - Decisions affecting R16包含有关此问题的董事会决定,但我不知道该决定背后的原因。
Stateful Module in Programming Erlang 2ndEdition by Joe Armstrong详细介绍了这个功能,但看不出作者的态度。
如果我们阅读官方文档Function Calls ,我们看到这个特征是故意略读的。其实官方文档强烈反对使用这个功能,引用efficiency function calls .如果是这样,为什么乔·阿姆斯特朗在他的书中提到了这样的特征?
我觉得这个功能很棒。正如上面提到的书,我的客户端代码可能如下所示
Obj:find(Key),
Obj:is_key(Key),
那么,我们不关心
Obj
由 dict:new()
创建, 或 gb_tree:new()
,不幸的是,dict
和 gb_tree
不要共享一致的界面,例如我们有 gb_tree:lookup
而不是 gb_tree:find
.
最佳答案
我无法告诉你控制一切的大 cabal 内部的讨论是什么,但我可以告诉你一些我从未考虑使用此功能的原因:
X
的属性 Foo
等于 10 还是 20?” dict:is_key(Value, Thingy)
,然后在那边写Thingy:is_key(Value)
?dict:is_key(Key, Foo:get_value(Key2))
这样的代码吗?” Foo:is_key(Key)
之间没有太大区别比 dict:is_key(Key, Foo)
.除了我在第一次阅读时确定,即使在完全没有上下文的情况下,在第二个版本中操作的数据对象绝对是一个字典。 Erlang 的符号赋值(又名“单一赋值”)很棒,为什么要破坏它?
关于function - 为什么 Erlang 元组模块有争议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954796/