Die Bibliothek Symbolism überlastet arithmetische Operatoren. Obwohl es in C# geschrieben ist kann ich es von F # verwenden:C# -Bibliothek überlastet den Operator ^. Wie benutze ich stattdessen **?
open Symbolism
let x = new Symbol("x")
let y = new Symbol("y")
let z = new Symbol("z")
printfn "%A" (2*x + 3 + 4*x + 5*y + z + 8*y)
die Ausgabe:
3 + 6 * x + 13 * y + z
Es ist jedoch Überlastungen auch ^
für Kräfte. Dies spielt natürlich nicht gut mit F #.
Als Schritt in Richtung auf dieses Problem zu umgehen, exportierte ich eine Methode Gruppe für Kräfte:
printfn "%A" (Aux.Pow(x, 2) * x)
Ausgang:
x^3
Wie ich **
überlasten können stattdessen die Aux.Pow
Methodengruppe zu bedienen?
Ich kann etwas tun:
let (**) (a: MathObject) (b: MathObject) = Aux.Pow(a, b)
Und das funktioniert für MathObject
Werte:
> x ** y * x;;
val it : MathObject = x^(1 + y)
Aber Aux.Pow
ist für int
auch überlastet:
public static MathObject Pow(MathObject a, MathObject b)
{ return new Power(a, b).Simplify(); }
public static MathObject Pow(MathObject a, int b)
{ return a^new Integer(b); }
public static MathObject Pow(int a, MathObject b)
{ return new Integer(a)^b; }
Any Vorschläge willkommen!
Können Sie nicht die gleichen Funktionen mit den anderen Operandentypen deklarieren? –
Hallo @ JonSkeet. Ich glaube nicht, dass F # -Operatoren (Funktionen) die Art von C# -Methoden überladen. Ist es das, was du meintest? – dharmatech