2011-08-15 45 views
0

我玩HDF5DotNet(請參閱http://hdf5.net/)。還有裏面有很多這種類型的構造函數的類H5Array使用F#的4維以上的數組無法初始化對象

new 'Type [] 
new 'Type [,] 
new 'Type [,,] 
new 'Type [,,] 
new 'Type [,,,] 
new 'Type [,,,,] 
new 'Type [,,,,,] 
... 

我寫

let data = Array2D.create 256 512 4. 
let test = H5Array data 

即使對於一個二維數組我得到一個錯誤說:

internal error: F# supports a maxiumum .NET array dimension of 4

我兩個問題是:

  1. 如何使用它適用於2D數據嗎?
  2. 如何使它適用於4維以上的數據?

回答

0

嗯,對於問題2,我想你會使用Array.Create

http://msdn.microsoft.com/en-us/library/dfs8044k.aspx

,使大級別的陣列。但我想知道#1是否是一個編譯器錯誤?

+0

謝謝你的回答。這個'let data = Array.CreateInstance(float.GetType(),[| 1; 2; 3; 4; 5 |])'給出了同樣的錯誤。我應該在某處報告這種行爲還是你會這樣做?順便說一句:有什麼解決辦法可以使它工作嗎?我現在唯一能想到的是創建另一個C#項目幷包裝構造函數。 –

+0

它是F#編譯器/語言的限制(語言規範說F#只支持4級)。這是我們第一次回想起「在野外」遇到這樣一個更高級別的真實案例。用C#類型封裝構造函數,公開一些調用這些構造函數的靜態方法,並防止F#需要查看高級數組,可能確實可以解決這個問題,如果不是,請告訴我。 – Brian

+0

感謝您的解釋。但是當對象具有更高級別的構造函數時,至少它應該始終適用於4級以下的隊伍。 –