У меня проблемы с созданием универсального математического класса (здесь, в качестве очень маленького примера кода класса типа Vector), который, однако, не ограничивается одним единственным числовым типом данных для своих значений, а вместо этого использует ^F
как статический разрешенный параметр типа , и я ожидаю, что он будет тем, что пользователь использует для создания экземпляра класса, например int
, но также BigRational
или MyCustomNumber
, если он придерживается ограничений.
type Vector< ^F> (_values : ^F []) =
let values = _values
member inline __.Dimension = Array.length values
member inline __.Item with get i = values.[i + 1]
static member inline ( * ) (a: Vector< ^F>) (scalar: ^F) =
Vector< ^F>(Array.init (a.Dimension) (fun i -> values.[i] * scalar)
override inline __.ToString() = "{" + (values.ToString()) + "}" // <--- problem-line
Моя проблема с этим кодом заключается в том, что я до сих пор не знаю, как правильно переопределить метод Object.ToString()
(то же самое для реализации IComparable, который, я полагаю, мог бы исправить таким же образом).
Это вообще возможно?
Заранее большое спасибо!