2009-10-06 7 views

risposta

19

Per un # un'estensione F che può essere chiamato da F #:

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

Nota che a partire da Beta 1, questo non risulta in un metodo di estensione compatibile con C#.

Per generare metodi di estensione visibili da C# (ma non utilizzabili come metodi di estensione in F #), vedere il collegamento nella modifica di Brian al post originale.

+0

maledizione, questo è quello che volevo. – esac

3

So che questo non risponde alla tua domanda, ma vale la pena segnalarlo. In F # e in altri linguaggi funzionali si vedono spesso moduli con metodi statici (come il modulo Seq) progettati per essere composti con altre funzioni. Per quanto ho visto, i metodi di istanza non sono facilmente composti, il che è uno dei motivi per cui questi moduli esistono. Nel caso di questa estensione, potresti voler aggiungere una funzione al modulo String.

module String = 
    let right n (x:string) = 
     if x.Length <= 2 then x 
     else x.Substring(x.Length - n) 

Quindi sarebbe usato così.

"test" 
|> String.right 2 // Resulting in "st" 

["test"; "test2"; "etc"] 
|> List.map (String.right 2) // Resulting in ["st"; "t2"; "tc"] 

Anche se in questo caso il metodo di estensione non sarebbe molto più codice.

["test"; "test2"; "etc"] 
|> List.map (fun x -> x.Right 2) 
Problemi correlati