2010-06-05 20 views
32

estoy escribiendo mi primera biblioteca # FF # string.Format

Estoy intentando utilizar string.Format y se queja de que no existe tal función.

¿No está disponible o estoy haciendo algo mal?

Respuesta

81

Si desea evitar el uso del nombre completo, puede utilizar open en Fa #:

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

Esto debería funcionar tanto en F # interactiva (ingrese primero la cláusula open) y en las aplicaciones compiladas normales. La clave es que debe escribir String con mayúsculas S. Esto se debe a que string en C# no es un nombre de tipo habitual; es una palabra clave que se refiere al tipo System.String.

Alternativamente, también podría echar un vistazo a la función sprintf. Es un # específico de alternativa F a String.Format que tiene algunas ventajas agradables - por ejemplo, que es de tipo verificado:

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

El compilador comprobará que los parámetros (de cuerda y int) coinciden con los especificadores de formato (%s para cuerda y %d para enteros). La función también funciona mejor en situaciones en las que desee utilizar la aplicación parcial de la función:

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

Esto producirá una lista de cadenas que contienen "número 1", "Número 2", etc ... Si quería hacer esto usando String.Format, tendría que escribir explícitamente una función lambda.

+2

Ojalá pudiera votar dos veces por sugerir 'sprintf', que es una opción mejor la mayoría del tiempo. –

+2

'sprint' es ciertamente más idiomático, pero puede ser más lento cuando se lo llama con frecuencia en algún ciclo ... –

+0

Guau, estoy sorprendido de lo lento que es' sprintf' en F #] (http://stackoverflow.com/questions/16742189/performance-of-sprintf-vs-string-format). Buen punto. –

3

el nombre completo de la misma es:

System.String.Format 
+0

Gracias, agregando el uso del sistema hace el truco – mamu

+0

Quiero decir sistema abierto, C# relleno en todas partes :) – mamu