Я создал следующий тип, используя неявную конструкцию типа:
open System
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]
//Properties
///The number of Rows in this Matrix.
member this.Rows = rows
///The number of Columns in this Matrix.
member this.Cols = cols
///Indexed Property for this matrix.
member this.Item
with get(x, y) = matrix.[x, y]
and set(x, y) value =
this.Validate(x,y)
matrix.[x, y] <- value
//Methods
/// Validate that the specified row and column are inside of the range of the matrix.
member this.Validate(row, col) =
if(row >= this.Rows || row < 0) then raise (new ArgumentOutOfRangeException("row is out of range"))
if(col >= this.Cols || col < 0) then raise (new ArgumentOutOfRangeException("column is out of range"))
Однако теперь мне нужно добавить следующий перегруженный конструктор к этому типу (который находится здесь в C #):
public Matrix(int rows, int cols)
{
this.matrix = new double[rows, cols];
}
Проблема, с которой я столкнулся, заключается в том, что, похоже, любые перегруженные конструкторы неявного типа должны иметь список параметров, который является подмножеством первого конструктора.Очевидно, что конструктор, который я хочу добавить, не соответствует этому требованию.Есть ли способ сделать это, используя неявную конструкцию типа?Каким образом я должен это сделать?Я довольно новичок в F #, поэтому, если бы вы могли показать весь тип со своими изменениями, я был бы очень признателен.
Заранее спасибо,
Боб
PSЕсли у вас есть другие предложения, чтобы сделать мой класс более функциональным, пожалуйста, не стесняйтесь комментировать это.