列表上的扩展方法?

时间:2013-02-26 13:58:34

标签: f# extension-methods

如何在F#列表中定义扩展方法?

像这样的天真尝试会导致错误:

type list with
    member this.abc() = 100

2 个答案:

答案 0 :(得分:6)

正确的语法是:

type List<'a> with
    member this.abc() = 100

您也可以使用限定名称Microsoft.FSharp.Collections.List<'a>,但不能使用类型缩写list<'a>

也就是说,使用模块功能更具惯用性。您应该创建一个模块函数,以便通过管道(|>)运算符轻松地与其他函数结合使用:

module List = 
    let abc (xs: _ list) = 100

答案 1 :(得分:2)

type Microsoft.FSharp.Collections.List<'T> with
  member x.IsNotEmpty() = not (List.isEmpty x)

let xs = [1]
xs.IsNotEmpty