Elixir的defstruct的性能优势是什么?

时间:2018-11-14 06:02:08

标签: elixir structure

我对Elixir的结构的理解是;
1.除了在编译时定义的键外,它不能保存其他键。
2.它可以具有默认值,该默认值在编译时进行评估。

是否有性能优势?
还有,我有什么想念的吗?

2 个答案:

答案 0 :(得分:2)

struct的主要优点不是任何性能,而是代码的可读性和正确性。考虑类似%{id: 123}之类的东西-我们不知道该地图代表什么。有了结构,我们可以拥有%Person{id: 123}%Company{id: 123},而这将是不同的东西。而且,正如GavinBrelstaff提到的那样,可以通过模式匹配轻松地表达出期望中的哪一个。面向正确性的结构中的另一个功能示例是@enforce_keys-通过在结构中进行设置,可以确保该功能的任何正常创建的实例都具有给定的密钥。

答案 1 :(得分:1)

嗯,Elixir是开源的。从Kernel.defstruct/1的实现中可以很容易看出,它所做的一切就是在调用它的模块上定义了__struct__方法(只有案例的false part被认为没有失去普遍性。

还有其他一切负责将这个结构告知Elixir编译器以为其启用新语法(%MyStruct{})并将有关该结构的一些元信息存储到编译器全局变量中。

该结构的下方由bare map %{}表示,并且没有任何提升性能的空间。