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

30

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

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

26

对于一个可以从F#中调用的F#扩展:

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

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

如果要生成在C#中可见但不能作为F#扩展方法使用的扩展方法,请参见Brian在原始帖子中编辑的链接。


4

我知道这不是真正回答你的问题,但值得指出的是,在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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接