Symbolism庫重載算術運算符。雖然它寫在C#我可以從F#使用它:C#庫重載^運算符。如何使用**代替?
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)
輸出:
3 + 6 * x + 13 * y + z
然而,它也重載^
的權力。這當然不適合F#。
作爲朝着解決辦法了一步,我出口爲列強的方法組:
printfn "%A" (Aux.Pow(x, 2) * x)
輸出:
x^3
我如何能超載**
使用Aux.Pow
方法組呢?
我可以做這樣的事情:
let (**) (a: MathObject) (b: MathObject) = Aux.Pow(a, b)
而且,做工作MathObject
值:
> x ** y * x;;
val it : MathObject = x^(1 + y)
但Aux.Pow
目前超載int
還有:
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; }
任何建議歡迎!
你不能用其他操作數類型聲明相同的函數嗎? – 2013-03-11 16:12:30
嗨@JonSkeet。我不認爲F#操作符(函數)會重載C#方法的方式。這是你的意思嗎? – dharmatech 2013-03-11 23:47:31