2009-10-19 28 views
4

香港专业教育学院建立自定义数据类型初始化数组到空白自定义类型OCAML

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

,我想初始化型载体,但包含什么,长度x的只是一个空数组的数组。

以下

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

使得阵列初始化为{A = 0,B = 0},并且在离开该空白给我的错误。即时尝试甚至可能做什么?

+0

你的例子有什么问题?对我来说这似乎完全合理。我想_why_这个_bad_上的_intention_或_perspective_会有帮助。但这通常是如何完成的,或者使用'一种选项类型。 _重点_。 – nlucaroni 2009-10-19 22:07:16

回答

6

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

如果您最终希望放置在您的阵列中的值尚不可用,也许您是在创建阵列太早?考虑使用Array.init在必要的输入可用的时刻创建它,而不必提前创建它并暂时将其暂时初始化。

函数Array.init需要一个函数,它用来计算每个单元格的初始值。

+0

谢谢完美! – 2009-10-21 13:39:30

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 
3

你可以通过使用一个空数组,即[||]初始化和'一个数组。执行:

let a = [||];; 

计算结果为:

val a : 'a array = [||] 

然后您可以附加到。它的长度为0,所以你不能设置任何东西,但出于学术目的,这可能会有所帮助。