2011-03-06 59 views
1

目前,我有以下代碼:添加重載的構造函數需要初始化代碼隱F#類型

type Matrix(sourceMatrix:double[,]) = 
     let rows = sourceMatrix.GetUpperBound(0) + 1 
     let cols = sourceMatrix.GetUpperBound(1) + 1 
     let matrix = Array2D.zeroCreate<double> rows cols 
     do 
     for i in 0 .. rows - 1 do 
     for j in 0 .. cols - 1 do 
      matrix.[i,j] <- sourceMatrix.[i,j] 

    new (rows, cols) = Matrix(Array2D.zeroCreate<double> rows cols) 

    new (boolSourceMatrix:bool[,]) = Matrix(Array2D.zeroCreate<double> rows cols) 
     for i in 0 .. rows - 1 do 
     for j in 0 .. cols - 1 do 
      if(boolSourceMatrix.[i,j]) then matrix.[i,j] <- 1.0 
      else matrix.[i,j] <- -1.0 

我的問題就出在最後的構造函數,一個bool[,]參數。編譯器不會讓我擺脫這兩個for循環我試圖用於在此構造函數初始化。我該如何做這項工作?

+0

構造函數重載實際上並沒有在任何點創建Matrix。你會如何期待這個工作? – ildjarn 2011-03-06 21:54:52

+0

對不起,我沒有那麼遠。在我的第一個循環中,事情出錯了。 – Beaker 2011-03-06 22:02:03

回答

2

最簡單的辦法是隻做到這一點,而不是:

new (boolSourceMatrix) = Matrix(Array2D.map (fun b -> if b then 1.0 else -1.0) boolSourceMatrix) 

,你是會碰到的特定問題是,從主構造的讓綁定字段都不能在替代構造函數可用。要解決這個問題,你可以使用明確定義的字段。但是,在這種情況下,最好利用Array2D模塊中的附加功能。

+0

再次感謝kvb! – Beaker 2011-03-06 21:59:57