簡體   English   中英

是否可以在F#中執行函數重載?

[英]Is it possible to do function overloading in F#?

就像是

let f x = log(x)

后來我可以將f應用於矩陣,向量或浮點數。

我想這是不可能的,因為F#是嚴格靜態類型的。 任何其他模式來克服這個問題?

謝謝!

看看我對這個問題的回答:

具有通用參數類型的函數

簡述:

  • 你可以重載一個類的成員(但不是let-bound函數)
  • 您可以使用“內聯”和“帽子”類型
  • 您可以模擬Haskell類型類並顯式傳遞方法字典
  • 您可以使用'obj'執行的運行時類型測試

您可以對類型/類使用運算符重載:

type Fraction = 
  { n : int; d : int; }
  static member (+) (f1 : Fraction, f2 : Fraction) =
    { n = f1.n * f2.d + f2.n * f1.d; d = f1.d * f2.d }

或內聯函數:

> let inline fi a b = a+b;;
val inline fi :
   ^a ->  ^b ->  ^c when ( ^a or  ^b) : (static member ( + ) :  ^a *  ^b ->  ^c)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM