Есть ли причина, по которой '\ 0' не поддерживается в F #? - PullRequest
2 голосов
/ 29 мая 2020

Когда я пытаюсь использовать '\0' в качестве символа в F #, это не работает. Вот что я вижу:

enter image description here

Я читал в другом месте , что Char.MinValue выполнит sh то же самое, хотя .

Есть ли причина, по которой '\0' не поддерживается?

Ответы [ 2 ]

5 голосов
/ 29 мая 2020

Спецификация F # описывает грамматику для символьных литералов:

3.5 Строки и символы

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

regexp non-escape-chars = '\' [^" \ 'ntbrafv]

regexp simple-char-char = | (любой символ, кроме '\ n' '\ t' '\ r' '\ b' '\ a' '\ f' '\ v' '\ ")

regexp unicodegraph-short =' \ ' 'u' hexdi git hexdi git hexdi git hexdi git

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

regexp trigraph = '\' di git -char di git -char di git -char

regexp char-char = | simple-char-char | escape-char | trigraph | unicodegraph-short

\0 не соответствует ни одному из них - если вам нужен нулевой символ, вы можете использовать

let c = '\000'

или Char.MinValue

4 голосов
/ 29 мая 2020

Поддерживается. Символьные литералы в F # являются либо символом Юникода, либо 16-битным номером Юникода. Просто backsla sh означает короткую или длинную escape-последовательность.

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)

...