2013-12-10 2 views
4

Я новичок в F #, и хочу знать, есть ли что-нибудь в F #, подобное template strings in Python. Так что я могу просто сделать что-то вроде:Шаблоны строк в F #?

>>> d = dict(who='tim', what='car') 
    >>> Template('$who likes $what').substitute(d) 
    'tim likes car' 
+1

'printf' и друзья достаточно близки. –

+1

Это может быть сделано как поставщик типа, с возможностью проверки всех отверстий. Я пишу подобный, но специализированный для XML https://github.com/mausch/XmlLiteralsTypeProvider/blob/master/Tests/Program.fs –

+0

То, что я описал в своем предыдущем комментарии, теперь реализовано! http://blog.mavnn.co.uk/type-safe-printf-via-type-providers/ –

ответ

1

Я не знаю ничего, встроенных в основные LIBS, которые будут работать в ключ-значение моды, что вы ищете, но вы можете иметь тип -checked отформатированные строки с помощью функции sprintf:

let intro = sprintf "I am %d years old. My name is %s" 35 "Sam" 
5

идиоматических способ сделать это в F # является с sprintf:

let newString = sprintf "First Name: %s Last Name: %s" "John" "Doe" 

Кроме того, у вас есть доступ к .net String.Format:

let newString = String.Format("First Name: {0} Last Name: {1}", "John", "Doe") 

Преимущество первого является то, что она является типобезопасным (т.е. вы не можете передать строку в целочисленный форматтер, например «% d»). Как отметил Бенджол в комментариях, невозможно передать строку формата в sprintf, потому что она статически типизирована. См. here для получения дополнительной информации.

+2

И преимущество второго заключается в том, что вы * можете * передать ему строковую переменную в виде строки формата :) – Benjol

Смежные вопросы