如何创建一个扩展方法(F#)? [重复](How do I create an extensio

2019-08-17 08:30发布

这个问题已经在这里有一个答案:

  • 在C#F#扩展方法 4回答

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

    public static string Right(this string host, int index)
    {
        return host.Substring(host.Length - index);
    }

Answer 1:

对于F#的扩展,可以从F#被称为:

type System.String with
  member x.Right(index) = x.Substring(x.Length - index)

需要注意的是测试版1,这不会导致一个C#兼容的扩展方法。

为了生成扩展方法从C#可见的(但不可用作在F#扩展方法),请参阅Brian的编辑到原来的职位的链接。



Answer 2:

我知道这并没有真正回答你的问题,但它是值得指出的。 在F#和其他功能的语言,你经常看到被设计成与其它功能由静态方法(如SEQ模块)模块。 据我所看到的,实例方法不容易组成,这是一个原因,为什么这些模块存在。 在这个扩展的情况下,你可能要一个函数添加到字符串模块。

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)


文章来源: How do I create an extension method (F#)? [duplicate]