如何創建在F#的擴展方法,例如,像這樣的C#擴展:如何創建擴展方法(F#)?
public static string Right(this string host, int index)
{
return host.Substring(host.Length - index);
}
如何創建在F#的擴展方法,例如,像這樣的C#擴展:如何創建擴展方法(F#)?
public static string Right(this string host, int index)
{
return host.Substring(host.Length - index);
}
對於F#的擴展,可以從F#被稱爲:
type System.String with
member x.Right(index) = x.Substring(x.Length - index)
注意,爲測試版1,這不會導致C#兼容的擴展方法。
要生成C#中可見的擴展方法(但不能用作F#中的擴展方法),請參閱Brian編輯原始文章中的鏈接。
我知道這並不能真正回答你的問題,但值得指出。在F#和其他函數式語言中,您經常會看到帶有靜態方法的模塊(如Seq模塊),這些模塊被設計爲與其他函數組合。據我所見,實例方法不容易編寫,這就是這些模塊存在的一個原因。在這個擴展的情況下,你可能想要爲String模塊添加一個函數。
module String =
let right n (x:string) =
if x.Length <= 2 then x
else x.Substring(x.Length - n)
然後它會像這樣使用。
"test"
|> String.right 2 // Resulting in "st"
["test"; "test2"; "etc"]
|> List.map (String.right 2) // Resulting in ["st"; "t2"; "tc"]
雖然在這種情況下擴展方法不會更多的代碼。
["test"; "test2"; "etc"]
|> List.map (fun x -> x.Right 2)
darn,這就是我想要的。 – esac 2009-10-06 04:51:07