/ / Méthode d'extension avec type de fonction F # - f #, type-extension

Méthode d'extension avec type de fonction F # - f #, type-extension

Le document MSDN sur les extensions de type indique que"Avant F # 3.1, le compilateur F # ne" supportait pas l'utilisation de méthodes d'extension de style C # avec une variable de type générique, un type de tableau, un type de tuple ou un type de fonction F # comme paramètre "this". "(http://msdn.microsoft.com/en-us/library/dd233211.aspx) Comment peut-on utiliser une extension de type utilisée sur le type de fonction F #? Dans quelles situations une telle fonctionnalité serait-elle utile?

Réponses:

4 pour la réponse № 1

Voici comment vous pouvez le faire:

[<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

Maintenant pour "Dans quelles situations une telle fonctionnalitéêtre utile? ", honnêtement, je ne le sais pas et je pense que c’est probablement une mauvaise idée de faire cela. Les méthodes d’appel sur une fonction semblent beaucoup trop JavaScript-ey, pas du tout idiomatiques en F #.


1 pour la réponse № 2

Vous pouvez simuler le . notation pour les méthodes d'extension avec F # "s |> opérateur. C’est un peu plus maladroit, vu la nécessité de crochets:

let extension f x =
let a = f x
a * 2

let f x = x*x

> f 2;;
val it : int = 4
> (f |> extension) 2;;
val it : int = 8
> let c = extension f 2;;  // Same as above
val c : int = 8