Comment créer une méthode d'extension (f#)? [dupliquer]
Cette question a déjà une réponse ici:
- méthodes d'extension F # en C # 4 réponses
Comment créer une méthode d'extension en F#, par exemple, comme cette extension C#:
public static string Right(this string host, int index)
{
return host.Substring(host.Length - index);
}
2 réponses
Pour une extension F# qui peut être appelée à partir de F#:
type System.String with
member x.Right(index) = x.Substring(x.Length - index)
Notez qu'à partir de la version bêta 1, cela n'entraîne pas une méthode d'extension compatible C#.
Pour générer des méthodes d'extension visibles à partir de C# (mais non utilisables en tant que méthodes d'extension en F#), voir le lien dans L'édition de Brian vers la publication d'origine.
Je sais que cela ne répond pas vraiment à votre question, mais cela vaut la peine d'être souligné. En F# et dans d'autres langages fonctionnels, vous voyez souvent des modules avec des méthodes statiques (comme le module Seq) qui sont conçus pour être composés avec d'autres fonctions. Pour autant que j'ai vu, les méthodes d'instance ne sont pas facilement composées, ce qui est l'une des raisons pour lesquelles ces modules existent. Dans le cas de cette extension, vous pouvez ajouter une fonction au module String.
module String =
let right n (x:string) =
if x.Length <= 2 then x
else x.Substring(x.Length - n)
, Il serait alors utilisé comme si.
"test"
|> String.right 2 // Resulting in "st"
["test"; "test2"; "etc"]
|> List.map (String.right 2) // Resulting in ["st"; "t2"; "tc"]
Bien que dans ce cas la méthode d'extension ne serait pas beaucoup plus de code.
["test"; "test2"; "etc"]
|> List.map (fun x -> x.Right 2)