2014-04-25 25 views

回答

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

當足夠的人開始這樣做時,它是慣用的:-) – Mau

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