为什么F#字符串不能以三引号中的双引号结尾?

Son*_*nül 5 string f# double-quotes

我是一名试图学习F#的C#开发人员.

据我所知,F#2.0对字符串有两种语法:普通字符串逐字字符串(如C#).使用F#3.0版本,有一个称为三引号字符串的功能.

据我所知,使用这种字符串格式,其间的每"""一个都是逐字字符串文字.并且不需要像双引号那样转义escapse序列字符.

例如,所有这些都是有效的字符串;

let a = """ This is a valid "string" """
let b = """ This is a valid \string """
let c = """ This is a valid 'string """
Run Code Online (Sandbox Code Playgroud)

但它有一个规则;

三引号字符串中的引号不能以双引号(")结尾,但它可以以一引号开头.

所以这是一个合法的字符串;

let s = """"This is a valid string"""
Run Code Online (Sandbox Code Playgroud)

但事实并非如此;

let s = """This is a valid string""""
Run Code Online (Sandbox Code Playgroud)

这是为什么?我查看Strings (F#)了MSDN页面,F#3.0语言规范3.5美元字符串和字符部分以及更多关于F#3.0语言功能但是我找不到任何有关为什么在字符串开头使用而不是最后使用它的合法信息.

你能开导我吗?

pdw*_*pdw 6

答案很简单:一旦编译器看到三个引号,三引号字符串就会结束.所以"""a""""是字符串的字符串a,后跟一个额外的"字符串,它会启动一个新的字符串.

如果要编写混淆代码,可以执行以下操作:

f"""a""""b"
Run Code Online (Sandbox Code Playgroud)

调用函数f有两个字符串"a""b".

  • @SonerGönül:实际上``""""""""""确实给出了编译时错误.正如您所预料的那样,三引号字符串可以以一个或两个引号开头,但不能以三个引号开头. (2认同)