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

时间:2009-10-19 21:10:31

标签: arrays ocaml

我设置了自定义数据类型

type vector = {a:float;b:float};

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

以下

let vecarr = Array.create !max_seq_length {a=0.0;b=0.0}

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:4)

您可以使用空数组初始化和'数组,即[||]。执行:

let a = [||];;

评估为:

val a : 'a array = [||]

然后你可以附加到。它的长度为0,因此您无法设置任何内容,但出于学术目的,这可能会有所帮助。

相关问题