Подтвердить что ты не робот

F # printf string

Я озадачен

let test = "aString"

let callMe =
    printfn test

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

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

Это отлично работает:

printfn "aString"
4b9b3361

Ответ 1

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

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

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

printfn "%s" test

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

Console.WriteLine test

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

Ответ 2

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

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