以下是我要做的事情:
and [<AbstractClass>] Figure() =
let mutable name : string = ""
let mutable color : ColorType = WHITE
abstract member Name : string
member F.Color
with get() = color
and set v = color <- v
abstract member motion : Dashboard -> SPosition -> ColorType -> list<SPosition * CellDashboard * bool>;
override F.ToString() = name
and CellDashboard(addingFigure : Nullable<Figure>) as C =
let mutable attacked : bool = false;
let mutable cleaned : bool = false;
let mutable _CellState : Nullable<Figure> = Nullable<Figure>(addingFigure);
麻烦的是:
Error 1 A generic construct requires that the type 'Figure' be non-abstract
为什么?我怎样才能避免这个错误?
答案 0 :(得分:5)
Nullable<T>
类型只能用于.NET值类型。错误消息实质上意味着编译器无法检查约束是否成立(因为类型是抽象的)。
如果您想在F#中表示缺失值,最好使用option<T>
代替。
如果您正在编写将在C#中使用的代码,那么最好避免暴露F#特定类型(例如option<T>
),并且可以使用AllowNullLiteral
标记类型,这使得可以将null
作为类型的值传递(但null
是邪恶的,所以除非必要,否则不应该这样做!)