1

我目前有以下代码:

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 循环。我怎样才能使这项工作?

4

1 回答 1

2

最简单的解决方案是这样做:

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

您遇到的具体问题是主构造函数中的 let-bound 字段在备用构造函数中不可用。要解决此问题,您可以根据需要使用明确定义的字段。但是,在这种情况下,最好利用Array2D模块中的附加功能。

于 2011-03-06T21:57:30.700 回答