Вопрос
Как 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»), но вы можете использовать существующие спецификаторы для создания дополнительных функций форматирования строк, которые компилятор будет проверять.