2009-10-06 12 views

Répondre

19

Pour une extension F # qui peut être appelé à partir de F #:

type System.String with 
    member x.Right(index) = x.Substring(x.Length - index) 

Notez que depuis la Beta 1, ceci n'aboutit pas à une méthode d'extension compatible C#.

Pour générer des méthodes d'extension visibles à partir de C# (mais non utilisables comme méthodes d'extension dans F #), voir le lien dans l'édition de Brian à l'article d'origine.

+0

darn, c'est ce que je voulais. – esac

3

Je sais que cela ne répond pas vraiment à votre question, mais cela vaut le coup de le souligner. En F # et dans d'autres langages fonctionnels, vous voyez souvent des modules avec des méthodes statiques (comme le module Seq) conçus pour être composés avec d'autres fonctions. Pour autant que j'ai vu, les méthodes d'instance ne sont pas faciles à composer, ce qui explique pourquoi 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 tel. 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) 
Questions connexes