我是一位尝试学习F#的C#开发人员。
据我所知,F#2.0有两种字符串语法:普通字符串和逐字字符串(like C#)。使用F#3.0版本,有一个名为三重引用字符串的功能。
据我所知,使用这种字符串格式,"""
之间的所有内容都是逐字字符串文字。而且没有必要像双引号一样逃避escapse sequence characters。
例如,所有这些都是有效的字符串;
let a = """ This is a valid "string" """
let b = """ This is a valid \string """
let c = """ This is a valid 'string """
但是有一条规则;
三重字符串中的引号不能以双引号(“)结尾, 但它可以以一个开头。
所以这是一个合法的字符串;
let s = """"This is a valid string"""
但这不是;
let s = """This is a valid string""""
为什么?我查看了Strings (F#)
on MSDN page,F# 3.0 Language Spec $3.5 Strings and Characters part和More About F# 3.0 Language Features,但我无法找到任何有关为什么它在字符串开头使用合法而不是在最后使用的信息
答案 0 :(得分:6)
答案很简单:一旦编译器看到三个引号,三引号字符串就会结束。因此"""a""""
是一个由字符a
组成的字符串,后跟一个额外的"
,它会启动一个新字符串。
如果要编写混淆代码,可以执行以下操作:
f"""a""""b"
使用两个字符串f
和"a"
调用函数"b"
。