openlang

Форматирование строк в F#

Впервые делаю библиотеку на F#

При использовании string.Format получаю сообщение, что такой функции не существует.

Я что-то делаю неправильно или она недоступна?

Переведено с английскогоПоказать оригинал

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    Чтобы не писать полное имя, в F# можно воспользоваться open:

    open System
    let greeting = String.Format("Hello {0}", "world")

    Это работает и в обычном скомпилированном приложении, и в F# interactive (сначала введите объявление open). Здесь важно писать String с заглавной S. Причина в том, что в C# string — не обычное имя типа, а ключевое слово, обозначающее System.String.

    Другой вариант, который стоит рассмотреть, — sprintf. Эта специфичная для F# альтернатива String.Format даёт полезные преимущества, например проверку типов:

    let greeting = sprintf "Hello %s! Number is %d" "world" 56

    Компилятор проверяет, соответствуют ли аргументы (string и int) указателям формата (%s означает строку, а %d — целые числа). Частичное применение функции — ещё одна ситуация, где эта функция удобнее:

    let values = [ 3 .. 12 ]
    let descriptions = values |> List.map (sprintf "number %d")

    Получится список строк с "number 3", "number 4" и так далее... Чтобы добиться того же с String.Format, пришлось бы явно написать лямбда-функцию.

    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Как экранировать проценты при вызове String.Format?

    В файле strings.xml у меня хранится SQL-запрос, и я пытаюсь построить итоговую строку в коде через String.Format. Запрос SELE…

    Ответы 3Последняя активность java
  2. NAK только когда в сообщении есть знак градуса (serial, Emacs)

    В общем, Temp: 23C получает ACK, а Temp: 23°C получает NAK, и плата ничего не показывает. Строка в логе: rx: "\25". Понижение…

    Ответы 1Последняя активность emacs-lisp
  3. Обрезал строку по байтам, как в C++, а Rust запаниковал

    Переношу на Rust кусок старого C++, который обрезает std::string до лимита в байтах обычным s.substr(0, n), и думал, что это…

    Ответы 4Последняя активность rustcpp