2011-10-24 7 views
1

は私がしようとしているものです:F#でNullable抽象タイプを使用するにはどうすればよいですか?ここ

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 

なぜですか?そして、どうすればこのエラーを回避できますか?

答えて

5

Nullable<T>タイプは、.NETの値タイプにのみ使用できます。エラーメッセージは、コンパイラが制約が保持されているかどうかをチェックできないことを意味します(型が抽象型なので)。

F#で欠損値を表現したい場合は、代わりにoption<T>を使用することをお勧めします。

あなたがC#のから使用されるコードを書いている場合は、(のようなoption<T>)F#の固有のタイプの公開を回避するために、より良いですし、としてnullに合格することが可能となりAllowNullLiteralとタイプをマークすることができます型の値ですが(nullは悪ですので、必要な場合を除いてこれを行うべきではありません)

関連する問題