F#函数类型的扩展方法

wla*_*baj 5 f# type-extension

Type Extensions上的MSDN doc声明"在F#3.1之前,F#编译器不支持使用带有泛型类型变量,数组类型,元组类型或F#函数类型的C#样式扩展方法作为"this"参数." (http://msdn.microsoft.com/en-us/library/dd233211.aspx)如何在F#函数类型上使用类型扩展?在什么情况下这样的功能会有用?

Tar*_*mil 6

以下是如何做到这一点:

[<Extension>]
type FunctionExtension() =
    [<Extension>]
    static member inline Twice(f: 'a -> 'a, x: 'a) = f (f x)

// Example use
let increment x = x + 1
let y = increment.Twice 5  // val y : int = 7
Run Code Online (Sandbox Code Playgroud)

现在对于"在什么情况下这样的功能会有用?",老实说,我不知道,我认为这样做可能是一个坏主意.在函数上调用方法感觉太像JavaScript了,在F#中根本不是惯用的.

  • 当足够多的人开始这样做时,这是惯用的:-) (2认同)