1、分类
Rust的文本类型主要包含6种:character
,string
,raw string
,byte
,byte string
,raw byte string
。
1.1、character(rust类型为:char)
CHAR_LITERAL :
' ( ~[' n r t] | QUOTE_ESCAPE | ASCII_ESCAPE | UNICODE_ESCAPE ) '
QUOTE_ESCAPE :
' | "
ASCII_ESCAPE :
x OCT_DIGIT HEX_DIGIT
| n | r | t | | 0
UNICODE_ESCAPE :
u{
( HEX_DIGIT _* )1..6 }
以一对单引号包含的单个合法的Unicode character
(Unicode
字符?),可以包含单引号自身,但是此时要以斜杠转义,如下都是合法的character字符
let s1 = 'H';
let s2 = ''';
let s3 = '"';
let s4 = 'n';
let s5 = 'x41'; // 与s6等价
let s6 = 'A';
let s7 = 'u{6211}'; //与s8等价
let s8 = '我';
特别注意:char值的合法范围是 0x0000 ~ 0xD7FF 或者 0xE000 ~ 0x10FFFF,采用UTF-32编码,固定4个字节长度。
1.2、string(rust类型为:&str)
STRING_LITERAL :
" (
~[" IsolatedCR]
| QUOTE_ESCAPE
| ASCII_ESCAPE
| UNICODE_ESCAPE
| STRING_CONTINUE
)* "
STRING_CONTINUE :
followed by n
以一对双引号包含的多个合法的Unicode character
(Unicode
字符?),可以包含双引号自身,但是此时要以斜杠转义,并允许使用""换行,此时下一行行首的所有空白字符会被自动去除,如下都是合法的string
let s1 = "HHHH";
let s2 = """;
let s3 = "''";
let s4 = "nnn";
let s5 = "x41x41"; // 与s6等价
let s6 = "AA";
let s7 = "u{6211}u{6211}"; //与s8等价
let s8 = "我我";
let s9 = "hello"; // 与s10等价
let s10 = "he
llo";
1.3、raw string(rust类型为:&str)
RAW_STRING_LITERAL :
r RAW_STRING_CONTENT
RAW_STRING_CONTENT :
" ( ~ IsolatedCR )* (non-greedy) "
| # RAW_STRING_CONTENT #
raw string不处理任意转移字符,以r
开头,紧跟着0~n个#
字符,中间是任何的Unicode character
序列,然后以同样数量的 #
结束,以下都是合法的raw sting