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

Posted

技术标签:

【中文标题】F# 不支持 \'\\0\' 是不是有原因?【英文标题】:Is there a reason '\0' is not supported in F#?F# 不支持 '\0' 是否有原因? 【发布时间】:2020-09-17 07:57:31 【问题描述】:

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

我已经读到elsewhereChar.MinValue 将完成同样的事情。

'\0' 不支持有什么原因吗?

【问题讨论】:

我认为该错误具有误导性。这不是一个有效的转义序列。你只需要三个数字,但已经回答了。 【参考方案1】:

F# specification 描述了 char 字面量的语法:

3.5 字符串和字符

regexp escape-char= '\' ["\'ntbrafv]

regexp non-escape-chars= '\' [^"\'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'

Char.MinValue

【讨论】:

【参考方案2】:

支持。 F# 中的字符文字是 unicode 字符或 16 位 unicode 数字。只是反斜杠表示它是一个短或长的转义序列。

let A = '\u0041' // Capital letter A

它的 ASCII 版本是 '\nnn'。所以

let A = '\065' // Capital letter A

所以\0 变成了\000

assert('\000' = Char.MinValue) // true

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

DEC(65) = HEX(41)

【讨论】:

以上是关于F# 不支持 '\0' 是不是有原因?的主要内容,如果未能解决你的问题,请参考以下文章

windows家庭版平台不支持虚拟化的原因?

投屏的时候画面显示不出来,显示视频不支持是啥原因

KVM使用QCOW2创建虚拟机报不支持错误

GUI:如何确定是不是支持某些 Unicode 字符?

windows presentation foundation (wpf) 不支持 UserControl/Grid...

支持向量机优化等价问题