Я пытаюсь использовать string.Format, и он жалуется, что такая функция не существует.
Не доступно ли это или я что-то не так?
Ответ 1
Если вы хотите избежать использования полного имени, вы можете использовать open в F #:
open System
let s = String.Format("Hello {0}", "world")
Это должно работать как в F # interactive (сначала введите предложение open), так и в обычные скомпилированные приложения. Главное, что вы должны написать String с верхним регистром S. Это связано с тем, что String в С# не является обычным именем типа - это ключевое слово, относящееся к типу System.String.
В качестве альтернативы вы также можете посмотреть функцию sprintf. Это F # -специальная альтернатива String.Format, которая имеет некоторые приятные преимущества - например, это тип проверен:
let s = sprintf "Hello %s! Number is %d" "world" 42
Компилятор проверяет, соответствуют ли параметры (строка и int) спецификаторам формата (%s для строки и %d для целых чисел). Функция также работает лучше в сценариях, где вы хотите использовать приложение с частичными функциями:
let nums = [ 1 .. 10 ]
let formatted = nums |> List.map (sprintf "number %d")
Это приведет к созданию списка строк, содержащих "номер 1", "номер 2" и т.д. Если вы хотите сделать это с помощью String.Format, вам нужно явно написать функцию лямбда.