F# 不支持 '\0' 是否有原因?

Nat*_*ins 3 .net f#

当我尝试'\0'在 F# 中用作字符时,它不起作用。这是我看到的:

在此处输入图片说明

我在其他地方读过,Char.MinValue虽然可以完成同样的事情。

有什么理由'\0'不支持吗?

Lee*_*Lee 5

在F#规范描述了字符的文字语法:

3.5 字符串和字符

正则表达式转义字符 = '\' ["\'ntbrafv]

正则表达式非转义字符 = '\' [^"\'ntbrafv]

正则表达式 simple-char-char= | (除 '\n' '\t' '\r' '\b' '\a' '\f' '\v' ' \" 之外的任何字符)

regexp unicodegraph-short = '\''u' hexdigit hexdigit hexdigit hexdigit

regexp unicodegraph-long = '\''U' hexdigit hexdigit hexdigit hexdigit hexdigit hexdigit hexdigit hexdigit

regexp trigraph = '\' digit-char digit-char digit-char

正则表达式 char-char= | 简单字符字符| 转义字符 | 三合字母 | unicodegraph-short

\0 不匹配这些 - 如果你想要空字符,你可以使用

let c = '\000'
Run Code Online (Sandbox Code Playgroud)

或者 Char.MinValue


Ast*_*sti 5

是支持的。F# 中的字符文字可以是 unicode 字符,也可以是 16 位 unicode 数字。只是反斜杠意味着它是短转义序列或长转义序列。

let A = '\u0041' // Capital letter A
Run Code Online (Sandbox Code Playgroud)

其 ASCII 版本是“\nnn”。所以

let A = '\065' // Capital letter A
Run Code Online (Sandbox Code Playgroud)

就这样\0变成了\000。

assert('\000' = Char.MinValue) // true
Run Code Online (Sandbox Code Playgroud)

请注意,unicode 说明符为十六进制,而短序列为十进制。

DEC(65) = HEX(41)