Как использовать переменную как строку форматирования с помощью Sprintf?
Я чувствую себя полным noob за то, что мне пришлось спросить об этом, но это меня озадачило.
Я установил строку формата следующим образом:
let fs = "This is my format test %s"
Затем я пытаюсь использовать его так:
let s = sprintf fs "testing"
Когда я это сделаю, я получаю эту ошибку:
//stdin(26,17): error FS0001: The type 'string' is not compatible with the type 'Printf.StringFormat<('a -> 'b)>'
Итак, я тогда попробовал это:
let s = sprintf (Printf.StringFormat fs) "test"
на который ответил REPL:
//stdin(28,18): error FS1124: Multiple types exist called 'StringFormat', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. 'StringFormat<_>'.
Итак, я тогда попробовал это:
let s = sprintf (Printf.StringFormat<string> fs) "test"
И я получаю это:
//stdin(29,18): error FS0001: The type ''a -> 'b' does not match the type 'string'
Я пропустил что-то больно очевидное? Это использует F # 3.0 на Mac из интерактивного окна Xamarin Studio F #.
Ответы
Ответ 1
Итак, вам действительно нужно создать StringFormat
, который имеет тип функции следующим образом
> sprintf (Printf.StringFormat<string->string>("Hello %s")) "World";;
val it : string = "Hello World"
В разделе 6.3.16 спецификации показан пример этого.