3

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

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

type list with
    member this.abc() = 100
4

2 回答 2

8

正确的语法是:

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

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

也就是说,使用模块函数更惯用。您应该制作一个模块函数,以便通过管道运算符轻松地与其他函数组合(|>)

module List = 
    let abc (xs: _ list) = 100
于 2013-02-26T14:49:42.263 回答
2
type Microsoft.FSharp.Collections.List<'T> with
  member x.IsNotEmpty() = not (List.isEmpty x)

let xs = [1]
xs.IsNotEmpty
于 2013-02-26T14:48:38.047 回答