我想我在问这个设计决定背后的理由。
可变形的原因数组在其他默认情况下不可变的数据结构(列表,记录,散列映射,集合)中是一种异常。
这有什么理由吗?有不可改变的替代方案吗?
答案 0 :(得分:3)
真的没有"理由阵列"。 Reason是OCaml的替代语法,OCaml具有可变数组。然而,Reason通常与BuckleScript后端一起使用,后端编译为JavaScript,它也有可变数组,但原因略有不同。
在OCaml中,当您需要数组的特征(通常是其性能配置文件)时,会使用数组,但您可能还希望将其用于其内存布局,这非常简单且易于与之交互。其他语言,但也必须能够通过共享地址空间的访问和变异与硬件进行通信。
使用BuckleScript,数组直接映射到JavaScript数组,除了可变之外,它还是动态调整大小的数组列表。在这里,您通常也会将其用于与JavaScript的性能和互操作,但由于实现略有不同,性能特征也略有不同。
在这两种情况下,如果你想要类似数组但不可变的东西,你通常会使用一个列表,但也有其他选项,例如Immutable.re's Vector。
最好问一下为什么OCaml在其标准库中也不包含不可变数组数据类型。我不确定是否有人可以给出明确的答案,但这可能只是因为它没有得到足够的要求,也许是因为列表完成了不可变数组的事情。