如何创建扩展方法(F#)?

如何创建扩展方法(F#)?,f#,extension-methods,F#,Extension Methods,如何在F#中创建扩展方法,例如,像这样的C#扩展: public static string Right(this string host, int index) { return host.Substring(host.Length - index); } 对于可以从F#调用的F#扩展名: 请注意,从Beta 1开始,这不会产生与C兼容的扩展方法 要生成从C#可见的扩展方法(但不能用作F#中的扩展方法),请参阅Brian编辑的原始帖子中的链接。我知道这

如何在F#中创建扩展方法,例如,像这样的C#扩展:

    public static string Right(this string host, int index)
    {
        return host.Substring(host.Length - index);
    }
对于可以从F#调用的F#扩展名:

请注意,从Beta 1开始,这不会产生与C兼容的扩展方法


要生成从C#可见的扩展方法(但不能用作F#中的扩展方法),请参阅Brian编辑的原始帖子中的链接。

我知道这并不能真正回答您的问题,但值得指出。在F#和其他函数式语言中,您经常会看到带有静态方法(如Seq模块)的模块,这些模块被设计为与其他函数组成。就我所见,实例方法不容易组合,这就是这些模块存在的原因之一。对于此扩展,您可能希望向字符串模块添加一个函数

module String =
    let right n (x:string) =
        if x.Length <= 2 then x
        else x.Substring(x.Length - n)
虽然在这种情况下,扩展方法不会有太多的代码

["test"; "test2"; "etc"]
|> List.map (fun x -> x.Right 2)
"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)