Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#中的模板字符串?_F# - Fatal编程技术网

F#中的模板字符串?

F#中的模板字符串?,f#,F#,我是F#的新手,想知道F#中是否有类似的东西。所以我可以做一些简单的事情,比如: >>> d = dict(who='tim', what='car') >>> Template('$who likes $what').substitute(d) 'tim likes car' 我不知道任何内置到核心libs的东西会以您正在寻找的键值方式工作,但是您可以使用函数对格式化字符串进行类型检查: let intro = sprintf "I

我是F#的新手,想知道F#中是否有类似的东西。所以我可以做一些简单的事情,比如:

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

我不知道任何内置到核心libs的东西会以您正在寻找的键值方式工作,但是您可以使用函数对格式化字符串进行类型检查:

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

在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”这样的整数格式设置程序)。正如Benjol在评论中指出的,不可能将格式字符串传递给
sprintf
,因为它是静态类型的。有关这方面的更多信息,请参阅。

F#5中的新功能是:

让firstName=“John”
让lastName=“Doe”
让newString=$“名字:{firstName}姓氏:{lastName}”
或者没有本地绑定(请注意三个引号):

let newString=$“”“名字:{“John”}姓:{“Doe”}”“”
较旧版本的F#应该使用
sprintf

let newString = sprintf "First Name: %s Last Name: %s" "John" "Doe"
让newString=sprintf“名字:%s姓氏:%s”“John”“Doe”

如果您有一个动态替换列表,您可以通过简单的折叠实现Template()的功能:

let substitutions = [("who", "tim"); ("what", "car")]
let template = "{who} likes {what}"
let replace (str : string) (key, value) = str.Replace(sprintf "{%s}" key, value)  

List.fold replace template substitutions

printf
和friends相当接近,可以作为一个类型提供程序来完成,其好处是静态检查所有孔。我正在写一篇类似的文章,但是专门针对XML,我在前面的评论中描述的内容现在已经实现了!第二种方法的好处是,您可以将字符串变量作为format string传递给它:)