2010-05-23 12 views
5

Código:¿Es esto un error de printf estructurado F #?

printfn "%10s" "abc" 
printfn "%-10s" "abc" 
printfn "%10d" 123 
printfn "%-10d" 123 
printfn "%10c" 'a' 
printfn "%-10c" 'a' 

Salida:

 abc 
abc 
     123 
123 
a 
a 

Así correcta alineación %c no funciona como espero ...

F# 2.0 build 4.0.30319.1

Respuesta

6

No creo que el hecho de que falta en la tabla de tipos válidos está causando el problema (definitivamente el modificador "% c" es compatible, porque el tipo de printfn "%c" es char -> unit como es de esperar). Entonces, parece un error para mí.

Una solución fácil es utilizar el modificador "O%", que tiene cualquier tipo (incluyendo también char valores) y formatos que utilizando ToString método (disponible para todos los tipos de .NET):

> printfn "%10O" 'a';; 
     a 
val it : unit 

por cierto: miré el código fuente de la biblioteca # F (desde el lanzamiento de CTP) y aquí es el bit correspondiente de printf.fs (línea 478):

| 's',nobj::args -> 
    formatString outputChar info width (unbox nobj) false; i+1,args 
| 'c',nobj::args -> 
    outputChar (unbox nobj); i+1,args // (1) 
| 'b',nobj::args -> 
    formatString outputChar info width 
    (if (unbox nobj) then "true" else "false") false; i+1,args 
| 'O',xobj::args -> 
    formatString outputChar info width 
    (match xobj with null -> "<null>" | _ -> xobj.ToString()) false; i+1,args 

La línea (1) formatea un carácter e ignora el parámetro width (que es el ancho que especificó). Entonces, a menos que esto sea (por alguna razón, por ejemplo, ¿rendimiento?) Comportamiento intencionado, realmente parece que parece un error.

Supongo que la siguiente implementación solucionaría el problema (Brian ;-)! ¿Estás ahí?):

| 'c', nobj::args -> 
    formatString outputChar info width 
    (string ((unbox nobj):char)) false; i+1,args 
3

% c no aparece en el table of valid types for F# printf. Quizás esa es la causa de tu problema.

Bastante extraño, según la tabla, no hay un tipo para imprimir caracteres individuales.

Cuestiones relacionadas