gpt4 book ai didi

arrays - 为什么 Erlang 静态数据结构不能改变?

转载 作者:行者123 更新时间:2023-12-02 18:58:12 25 4
gpt4 key购买 nike

我对Erlang的理解是你有

  1. 所有数据结构都是不可变的
  2. 一些数据结构是静态的,例如记录,即编译时
  3. 一些数据结构是动态的,例如 map ,即运行时

假定=所有内容都被复制,包括 map 等静态数据结构

问题 = 为什么我们不能更改记录?

(猜测)答案 = 因为记录是在 header 宏中定义的,该 header 宏由预处理器更改。

(猜测)错误答案 = 因为数据结构具有固定的内存大小(事实并非如此),并且与 C 数组不同,它不在连续内存中,而是在链表中?

最佳答案

(Guess at) Answer = because the record is defined in the header macro which is changed by the pre-processor.

这非常接近。记录是一个编译时功能:记录只是一个具有特殊布局的元组,在编译过程中所有记录操作都会转换为元组操作。

因此给出这个记录定义:

-record(foo, {a, b = default_b}).

#foo{a = x} 由编译器转换为 {foo, x, default_b},以及记录访问,例如 MyRecord#foo .x 变成类似于 element(MyRecord, 2) 的内容。 (除了它还检查 MyRecord 是否为 foo 记录,否则会引发 badrecord 错误)

这就是为什么您无法在运行时更改记录的元素数量:处理此类记录的任何代码都需要重新编译才能访问正确的字段。这类似于如果更改结构的布局则需要重新编译 C 代码。

关于arrays - 为什么 Erlang 静态数据结构不能改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65922826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com