Я использую файл ресурсов для строк, а затем использую также те, у кого есть заполнители, и нужно форматировать строки.Ошибка F # с помощью sprintf и формата
У меня есть (о) следующий код в моем проекте:
let create s = sprintf (Printf.StringFormat<_>(s))
let formatstring = "%s:%d" // this is actually then gotten from the resource strings
let createsomespecificstring s d = create formatstring s d
let resultstring = createsomespecificstring "123" 123
Этот код работает, когда я использую F # 3.0. Перестановка его скомпилировать его с 3.1, он компилирует, но дает ошибку во время выполнения:
Unable to cast object of type 'Fi[email protected][Microsoft.FSharp.Core.Unit,System.String,System.String,System.String,System.String]' to type 'Microsoft.FSharp.Core.FSharpFunc
2[Microsoft.FSharp.Core.FSharpFunc
2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.PrintfImpl+PrintfEnv3[Microsoft.FSharp.Core.Unit,System.String,System.String]],Microsoft.FSharp.Core.FSharpFunc
2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Object]]]'.
Если Im выполнения кода в REPL он не работает на всех с:
stdin(28,5): error FS0030: Value restriction. The value 'resultstring' has been inferred to have generic type val resultstring : '_a
Either define 'resultstring' as a simple data term, make it a function with explicit arguments or, if you do not intend for it to be generic, add a type annotation.
Приведенный выше код несколько поражений цель сильной печати снова, но ее вид приятный, когда у вас есть строки ресурсов.
Я делаю что-то неправильно (кроме того, упомянутый выше)?
Любые идеи о том, как сделать это лучше и даже заставить его работать (особенно в 3.1)?
Edit: После первого ответа (который работает в данном конкретном случае) число вариантов форматирования/аргументы «случайная» длина:
let formatstring = "%s:%d:%d"
let createsomespecificstring s d d' = create formatstring s d d'
let resultstring = createsomespecificstring "123" 123 345
Тогда он не работает снова.
Вы пробовали 'let resultstring: string = createomespecificstring ...'? – kvb
@kvp * лицоpalm * no I hadnt. Я мог бы даже сделать это на «более высоком уровне», а затем он работает. let createomespecificstring s d d ': string = create formatstring s d d' .... подтверждено. к плохому вы не писали это как ответ. и плохой я сам этого не видел. спасибо! –
Я могу помочь! – kvb