2

次の単純なタイプがあります。

module Structures
    type Point2D<'T> (x : 'T, y : 'T) =
        member this.X = x
        member this.Y = y
        member this.IsEqualTo (p : Point2D<'T>) =
            (this.X = p.X) && (this.Y = p.Y)

しかし、Visual Studio (2012 試用版) では、"IsEqualTo" という名前の下に赤い波線が配置され、"this.X" の下に青い波線が配置されます。

赤い波線のエラー メッセージは次のとおりです。

ジェネリック メンバー IsEqualTo は、このプログラム ポイントの前に不均一なインスタンス化で使用されています。このメンバーが最初に現れるように、メンバーの順序を変更することを検討してください。または、引数の型、戻り値の型、および追加のジェネリック パラメーターと制約を含む、メンバーの完全な型を明示的に指定します。

青い線のメッセージは次のとおりです。

型パラメーターに制約がありません 'when 'T : equality'

他のすべてのメンバーの前に「IsEqualTo」を配置しようとしましたが、エラーは解決しません。

=エラーは、サインインthis.X = p.Xがジェネリック型で機能しているという事実と関係があると思いますが、'T修正できないようです。

よろしくお願いいたします。

4

1 に答える 1

8
type Point2D<'T when 'T : equality> (x : 'T, y : 'T) =
    member this.X = x
    member this.Y = y
    member this.IsEqualTo (p : Point2D<'T>) =
        (this.X = p.X) && (this.Y = p.Y)
于 2012-06-17T07:24:30.580 に答える