類型擴展上的MSDN文檔聲明:「在F#3.1之前,F#編譯器不支持使用帶有泛型類型變量,數組類型或元組類型的C#風格的擴展方法,或一個F#函數類型作爲「this」參數。「 (http://msdn.microsoft.com/en-us/library/dd233211.aspx) 如何在F#函數類型上使用類型擴展?在什麼情況下這樣的功能會有用?使用F#函數類型的擴展方法
4
A
回答
4
這裏是你如何能做到這一點:
[<Extension>]
type FunctionExtension() =
[<Extension>]
static member inline Twice(f: 'a -> 'a, x: 'a) = f (f x)
// Example use
let increment x = x + 1
let y = increment.Twice 5 // val y : int = 7
現在對於「?在什麼情況下會這樣的功能是有用的」,我真的不知道,我認爲這可能是一個壞主意,永遠做這個。調用函數的方法也是JavaScript-ey,在F#中不是慣用的。
1
您可以使用F#的|>
運算符模擬擴展方法的.
表示法。這是一個有點笨拙的,因爲需要括號:
let extension f x =
let a = f x
a * 2
let f x = x*x
> f 2;;
val it : int = 4
> (f |> extension) 2;;
val it : int = 8
> let c = extension f 2;; // Same as above
val c : int = 8
相關問題
- 1. F# - 類型擴充VS類型擴展
- 2. F#模塊擴展與類型擴展
- 3. 使用擴展方法的擴展類
- 4. F#和PLINQ擴展方法
- 5. 是否可以使用擴展方法擴展泛型類?
- 6. 擴展方法定義/調用在F#
- 7. 流類型:使用返回父類的函數的擴展類
- 8. 通用類型擴展方法ToMultidimensionalArray
- 9. F#擴展鋸齒陣列類型
- 10. 將Cython擴展類型方法傳遞給純C函數
- 11. F#元組的擴展方法
- 12. 從基類構造函數的擴展類調用方法
- 13. 將擴展方法應用於泛型類型泛型類型
- 14. python內置類型的擴展方法!
- 15. 擴展方法中的類型推斷
- 16. 多種類型的擴展方法
- 17. 聯函數和類型的擴展名
- 18. 註釋類型的擴展函數
- 19. 擴展時使用父類的方法
- 20. 使用擴展類的構造函數
- 21. 擴展類成員的擴展方法?
- 22. F#中的類型擴展和成員可見性F#
- 23. 擴展類方法
- 24. 如何創建擴展方法(F#)?
- 25. F#如何擴展泛型數組類型?
- 26. 使用擴展方法覆蓋F#中的靜態屬性
- 27. 與類型約束擴展方法
- 28. 擴展方法,返回接口類型
- 29. 擴展方法和類型推斷
- 30. 強類型LINQ擴展方法
當足夠的人開始這樣做時,它是慣用的:-) – Mau