我目前有以下代码:
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 :(得分:2)
最简单的解决方案就是这样做:
new (boolSourceMatrix) = Matrix(Array2D.map (fun b -> if b then 1.0 else -1.0) boolSourceMatrix)
您遇到的具体问题是主构造函数中的let-bound字段在备用构造函数中不可用。要解决此问题,您可以使用明确定义的字段(如果需要)。但是,在这种情况下,最好利用Array2D
模块中的附加功能。