我在创建通用数学类(这里是一个非常小的示例代码,是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的方法相同,我相信可以用相同的方法解决)。
这实际上有可能吗?
非常感谢!
答案 0 :(得分:3)
let
绑定的值values
type Vector<'F> (_values : 'F[]) = member val Values = _values member inline me.Dimension = Array.length me.Values member inline me.Item with get i = me.Values.[i + 1] static member inline ( * ) (a: Vector<_>, scalar) = Vector<_>(Array.init (a.Dimension) (fun i -> a.Values.[i] * scalar)) override me.ToString() = "{" + (me.Values.ToString()) + "}"