2017-06-26 6 views
3

私はIEquatable<T>をF#の特定のクラスに実装しようとしています。しかし、この場合、予期しないエラーが発生します。これはコンパイルされませんF#でこのインターフェイスの実装がコンパイルされないのはなぜですか?

type Foo private (name : string) = 

member this.Name = name 

member this.Equals (other : Foo) = this.Name = other.Name 

override this.Equals other = 
    match other with | :? Foo as foo -> this.Equals foo | _ -> false 

override this.GetHashCode() = this.Name.GetHashCode() 

interface IEquatable<Foo> with 
    this.Equals other = this.Equals other 

は、私は、次のコードを持っています。私は次のエラーが表示されます: "Unexpected keyword with 'with' member definition '。また、"間違ったインデントの可能性があります... "という警告が表示されます。なぜ上記はコンパイルされません。インターフェースは、一般的にF#で実装されている方法です?

答えて

6

まあ、私は、実装の前にメンバーを入れていませんでした。質問を自分自身に答えることができます。と

this.Equals other = this.Equals other 

の交換します

member this.Equals other = this.Equals other 

コンパイラが問題として "with"キーワードが私を捨てました。

+1

F#のそれ以降のバージョンでは、エラー報告を改善するためにいくつかの作業が行われています。これは良い候補のようです。おそらくこれを問題として投稿する:github.com/microsoft/visualfsharp/issues? – FuleSnabel

関連する問題