将Array初始化为Blank自定义类型OCAML

Fai*_*bid 4 arrays ocaml

我已经设置了自定义数据类型

type vector = {a:float;b:float};
Run Code Online (Sandbox Code Playgroud)

我想初始化一个类型向量但不包含任何内容的数组,只是一个长度为x的空数组.

下列

let vecarr = Array.create !max_seq_length {a=0.0;b=0.0}
Run Code Online (Sandbox Code Playgroud)

使数组init为{a = 0; b = 0},并将其保留为空白会给我带来错误.是我试图做甚至可能吗?

new*_*cct 6

什么没有?当你检索新初始化数组的元素时,你必须得到一些东西,对吧?你期望得到什么?

如果您希望能够表达某个值无效或某种类型值的能力,那么您可以使用option其值为或者的类型None,或者Some value:

let vecarr : vector option array = Array.create !max_seq_length None

match vecarr.(42) with
  None -> doSomething
| Some x -> doSomethingElse
Run Code Online (Sandbox Code Playgroud)


Pas*_*uoq 6

你不能在OCaml中拥有一个未初始化的数组.但请以这种方式看待它:由于未初始化的值,您的程序中永远不会有难以重现的错误.

如果您最终想要放置在数组中的值尚不可用,那么您是否过早地创建了数组?考虑使用Array.init在必要输入可用的确切时刻创建它,而不必提前创建它并使其暂时未初始化.

该函数Array.init接受一个函数,它用于计算每个单元格的初始值.