2009-10-19 40 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,所以你不能設置任何東西,但出於學術目的,這可能會有所幫助。