F # printf строка - PullRequest
       41

F # printf строка

32 голосов
/ 25 февраля 2012

Я озадачен

let test = "aString"

let callMe =
    printfn test

Почему это не работает?Выдает ошибку ниже во время компиляции:

Тип 'string' не совместим с типом 'Printf.TextWriterFormat <' a> '

Это прекрасно работает:

printfn "aString"

Ответы [ 2 ]

48 голосов
/ 25 февраля 2012

Это потому, что параметр format на самом деле не является string. Это TextWriterFormat<'T>, и компилятор F # преобразует формат строки в этот тип. Но он не работает с string переменными, потому что компилятор не может преобразовать string в TextWriterFormat<'T> во время выполнения.

Если вы хотите напечатать содержимое переменной, вам даже не следует пытаться использовать printfn таким образом, потому что переменная может содержать спецификации формата.

Вы можете использовать формат %s:

printfn "%s" test

Или используйте .Net Console.WriteLine():

Console.WriteLine test

Не забудьте добавить open System вверху файла, если вы хотите использовать класс Console.

4 голосов
/ 06 августа 2015

В соответствии с тем, что сказал svick , вы также можете попробовать это:

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