Ok, kann mir jemand erklären, warum F # Ihnen erlaubt, die Operatoren> und^zu überladen, aber nicht erlaubt, sie zu benutzen?F # und Operator Überladungen: (>) und (^)
Wenn ich meinen F # -Code als Bibliothek kompiliere und diese Operatoren von VB verwende, funktionieren alle. Wenn ich diese Operatoren aus C# verwende, funktionieren alle außer op_Concatenate (wie erwartet). Aber F # ignoriert nicht nur einige von ihnen, der statische Typ-Checker sagt Ihnen nicht einmal, dass er dies plant.
bearbeiten Codebeispiel
type OppTest4(value: int) =
member this.value = value
static member (^) (left : OppTest4, right : OppTest4) =
OppTest4(Int32.Parse(left.value.ToString()^right.value.ToString() ))
static member (+) (left : OppTest4, right : OppTest4) =
OppTest4(left.value + right.value)
static member (>) (left : OppTest4, right : OppTest4) =
left.value > right.value
static member (<) (left : OppTest4, right : OppTest4) =
left.value < right.value
Ok, warum funktioniert das dann nicht? "static member (>) (links: OppTest4, rechts: OppTest4) = left.value> right.value" –
> es ist heute schwer vorstellbar, allgemein interoperable Operator-Funktionen in allen Sprachen auf .Net zu verwenden.
Ich wäre neugierig auf, ob ich die Standard-Operatordefinition nur für einen Typ mit einer Let-Bindung Schatten - ich habe keine Kontrolle über die Typ-Implementierung. Wenn ja, wie würde das geschehen? Ich habe versucht, lassen (>) (a: SomeType) (b: SomeType) = ... aber dann hat jeder Vergleich zwischen anderen Typen brach, so dass 2> 1 nicht mehr kompilieren. – em70