2010-06-05 8 views
32

Je suis en train d'écrire mon premier F # bibliothèqueF # string.Format

Je tente d'utiliser string.Format et il se plaint que pas une telle fonction existe.

N'est-ce pas disponible ou est-ce que je fais quelque chose de mal?

Répondre

81

Si vous voulez éviter d'utiliser le nom complet, vous pouvez utiliser open en F #:

open System 
let s = String.Format("Hello {0}", "world") 

Cela devrait fonctionner dans les deux F # interactive (entrez d'abord la clause open) et dans les applications compilées normales. L'élément clé est que vous devez écrire String avec majuscule S. C'est parce que string en C# n'est pas un nom de type habituel - c'est un mot-clé se référant au type System.String. Vous pouvez aussi jeter un oeil à la fonction sprintf. Il est une alternative F # de Spécifiques à String.Format qui a quelques belles prestations - par exemple, il est de type vérifié:

let s = sprintf "Hello %s! Number is %d" "world" 42 

Le compilateur vérifie que les paramètres (chaîne et int) correspondent aux spécificateurs de format (%s pour cordes et %d pour les entiers). La fonction fonctionne également mieux dans les scénarios où vous souhaitez utiliser une application de fonction partielle:

let nums = [ 1 .. 10 ] 
let formatted = nums |> List.map (sprintf "number %d") 

Cela produira une liste de chaînes contenant « numéro 1 », « numéro 2 », etc ... Si vous voulez faire en utilisant String.Format, vous devez écrire explicitement une fonction lambda.

+2

Je voudrais pouvoir avoir deux fois la même chose pour suggérer 'sprintf', ce qui est une meilleure option la plupart du temps. –

+2

'sprint' est certainement plus idiomatique, mais il peut être plus lent lorsqu'il est appelé fréquemment dans une boucle ... –

+0

Wow-je suis surpris de juste [combien lent 'sprintf' est en F #] (http://stackoverflow.com/questions/16742189/performance-de-sprintf-vs-string-format). Bon point. –

3

le nom complet est:

System.String.Format 
+0

Merci, l'ajout de l'utilisation du système fait l'affaire – mamu

+0

Je veux dire système ouvert, C# bourré partout :) – mamu