41 votes

F# printf string

Je suis perplexe

let test = "aString"

let callMe =
    printfn test

Pourquoi cela ne fonctionne-t-il pas ? L'erreur suivante se produit au moment de la compilation :

Le type 'string' n'est pas compatible avec le type 'Printf.TextWriterFormat<'a>'.

Cela fonctionne bien :

printfn "aString"

64voto

svick Points 81772

C'est parce que le format n'est pas réellement un string . C'est TextWriterFormat<'T> et le compilateur F# convertit le format de la chaîne en ce type. Mais cela ne fonctionne pas sur string car le compilateur ne peut pas convertir les variables string a TextWriterFormat<'T> au moment de l'exécution.

Si vous voulez imprimer le contenu de la variable, vous ne devriez même pas essayer d'utiliser printfn de cette façon, car la variable pourrait contenir des spécifications de format.

Vous pouvez soit utiliser le %s format :

printfn "%s" test

Ou bien utilisez l'application .Net Console.WriteLine() :

Console.WriteLine test

N'oubliez pas d'ajouter open System en haut du fichier si vous voulez utiliser l'option Console classe.

4voto

Shawn Eary Points 161

Conformément à ce que svick dit, vous pouvez aussi essayer ceci :

let test = "aString"
let callMe = printfn (Printf.TextWriterFormat<_> test)
callMe

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X