Symbolism quá tải các toán tử số học của thư viện. Mặc dù nó được viết bằng C# Tôi có thể sử dụng nó từ F #:C# thư viện quá tải^toán tử. Cách sử dụng ** thay thế?
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)
đầu ra:
3 + 6 * x + 13 * y + z
Tuy nhiên, nó cũng quá tải ^
cho quyền hạn. Điều này tất nhiên không chơi tốt với F #.
Là một bước tiến trong việc khắc phục, tôi đã xuất khẩu một nhóm phương pháp, quyền hạn:
printfn "%A" (Aux.Pow(x, 2) * x)
đầu ra:
x^3
Làm thế nào tôi có thể quá tải **
sử dụng nhóm Aux.Pow
phương pháp để thay thế?
tôi có thể làm một cái gì đó như thế này:
let (**) (a: MathObject) (b: MathObject) = Aux.Pow(a, b)
Và đó không làm việc cho MathObject
giá trị:
> x ** y * x;;
val it : MathObject = x^(1 + y)
Nhưng Aux.Pow
bị quá tải cho int
cũng như:
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; }
Bất kỳ đề nghị chào đón!
Bạn không thể khai báo cùng chức năng với các loại toán hạng khác? –
Xin chào @JonSkeet. Tôi không nghĩ rằng F # nhà khai thác (chức năng) quá tải cách C# phương pháp làm. Đó có phải ý của bạn? – dharmatech