F#允许在定义函数时将它们作为“成员”添加到类型(例如,记录类型)。但是,F#还允许将新的实例成员添加到现有类型中,甚至可以是在其他地方和其他.net语言中声明的成员。
以下示例Duplicate向的所有实例添加了新的实例方法String。
typeSystem.Stringwith memberthis.Duplicatetimes = Array.inittimes (fun _ -> this)
注意:this是一个任意选择的变量名,用于引用正在扩展的类型的实例-x会同样有效,但可能不那么自描述。
然后可以通过以下方式调用它。
// F#风格的通话 let result1 = "嗨,您好!".Duplicate 3 // C#样式的调用 let result2 = "嗨,您好!".Duplicate(3) // Both result in three "嗨,您好!" strings in an array
此功能与C#中的扩展方法非常相似。
也可以以相同方式将新属性添加到现有类型。如果新成员不接受任何参数,它们将自动成为属性。
typeSystem.Stringwith memberthis.WordCount= ' ' // 空格字符 |> Array.singleton |> fun xs -> this.Split(xs, StringSplitOptions.RemoveEmptyEntries) |> Array.length let result = "This is an example".WordCount // 结果是4