Вопрос

Как F# может проверять строки формата во время компиляции, чтобы определить, что x имеет тип int в следующем определении?

let foo x = sprintf "%d" x`? 

Это жестко запрограммировано в языке или кто-нибудь может написать свою собственную функцию «my_print», которая использует строки формата с другим синтаксисом?Например:

let foo x = my_print "{integer}" x
Это было полезно?

Решение

Вы можете немного прочитать об этом в версии 6.4.17 (форматы printf). здесь, но кратко

  • это встроено в язык
  • строковые литералы можно эффективно «привести» к странному типу «Формат»
  • printf и его друзья ожидают первый аргумент типа Format, что обеспечивает приведение

Конечным результатом является то, что вы можете создавать свои собственные функции в стиле printf, но должны использовать те же форматы %s, поскольку эти функции встроены.

Другие советы

Здесь приведен пример того, как вы можете создать свой собственный printf- функции стиля в F #. Вы не можете изменить спецификаторы формата (например, «% d»), но вы можете использовать существующие спецификаторы для создания дополнительных функций форматирования строк, которые компилятор будет проверять.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top