Ich versuche IEquatable<T>
für eine bestimmte Klasse in F # zu implementieren. In diesem Fall erhalte ich jedoch einen unerwarteten Fehler.Warum wird diese Schnittstellenimplementierung in F # nicht kompiliert?
Ich habe den folgenden Code:
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
Diese nicht kompiliert. Ich erhalte den folgenden Fehler: "Unerwartetes Schlüsselwort" mit "in der Mitgliedsdefinition". Außerdem erhalte ich eine "mögliche falsche Einrückung ..." Warnung. Ich bin nicht sicher, was das Problem ist, weil es mir scheint, dass das oben wird, wie in F # implementiert allgemein Schnittstellen. Warum kompilieren die oben nicht?
In späteren Versionen von F # wurden einige Verbesserungen vorgenommen, um die Fehlerberichterstattung zu verbessern. Das scheint ein guter Kandidat zu sein. Vielleicht poste dies als ein Thema auf: github.com/microsoft/visualfsharp/issues? – FuleSnabel