rust字面量

字面量就是值。值最终必须编码成二进制存储在某块内存上。

变量与字面量的关系就像杯子和水的关系。

字面量是有类型的。字面量类型有:布尔、数字、文本、字节

一、布尔

类型是bool

true

false

二、数字

通过后缀表示类型

通过前缀表示进制

通过 "_" 来分割数据,易于可读性

(一)整数

长度 有符号类型 无符号类型
8位 i8 u8
16位 i16 u16
32位 i32 u32
64位 i64 u64
128位 i128 u128
视架构而定 isize usize

isize 和 usize 类型取决于程序运行的计算机CPU类型: 若CPU是32位的,则这两个类型是32位的,同理,若CPU是64位,那么它们则是64位。

进制形式 示例
十进制 98
十六进制 0xff
八进制 0o77
二进制 0b1111_0000

例如

复制代码
7
7u8
0b111
0x7u8

(二)小数

f32

f64

例如

复制代码
0.1
0.1f64;
0.1e7;
12E-9f64;

三、文本

(一)单字符

类型是char

使用''

两个单引号之间可以是unicode字符和转义字符。

所有转义字符

名称
\x41 7-bit字符编码(2位数字,最大值为0x7F)
\u{7FFF} 24-bit Unicode字符编码(最多6个数字)
\n 换行符
\r 回车符
\t 制表符
\\ 反斜线
\' 单引号
\" 双引号
\0 Null

例子

复制代码
'a'
'中'
'\u{4567}'
'\x62'
'\"'

(二)字符串

字符串字面量类型是&str。这也就是为什么字符串字面值是不可变的;&str 是一个不可变引用。

1.双引号括起来就是一个字符串

当在换行符前面使用 \时,则\、换行符、下一行开头的所有空格都将会被忽略:

复制代码
let a = "foobar";
let b = "foo\
     bar";
assert_eq!(a,b);

2.原生字符串字面量

不做任何转义,表示原样字符串

(1)使用r""

例如,

复制代码
r"\x52"等价于"\\x52",值为\x52
"foo"; r"foo"; // foo
"\x52"; "R"; r"R"; // R
"\\x52"; r"\x52"; // \x52

(2)使用 r#""#的方式来指定字符串边界

如果字符串中有双引号怎么办?因为原生字符串里不能使用转义,所以 \" 是肯定不行的。

在双引号两侧加#,比如,

复制代码
r#""foo""#等价于"\"foo\"",值为"foo"

如果字符串中有#怎么办?那就增加边界#的数量,开头结尾需要相等数量的 #。

比如字符串里面有4个 #,那么该字符串可以用r#####"abc####def"#####来包围起来,也就是比里面的 # 多即可。

示例:

复制代码
"\"foo\""; r#""foo""#; // "foo"
"foo #\"# bar";
r##"foo #"# bar"##; // foo #"# bar

四、字节

(一)字节

字节类型其实就是u8,就是整数。

使用b''形式

两个单引号之间可以是非转义ascii字符和字节转义

字节转义

名称
\x7F 8-bit字符编码(2位数字,最大值为255)
\n 换行符
\r 回车符
\t 制表符
\\ 反斜线
\0 Null
\' '
\" "

例子

复制代码
b'7'
b'\x55'
b'\n'
b'\''
b'\\'

(二)字节串

字节串字面量类型为&[u8]。

1.使用 b""

比如

复制代码
b"world"
b"\x52\x75\x73\x74 as bytes"

2.原生字节串字面量

不做任何转义

(1)使用br""

复制代码
b"foo"; br"foo"; // foo
b"\x52"; b"R"; br"R"; // R
b"\\x52"; br"\x52"; // \x52

(2)使用br#""#

示例:

复制代码
b"\"foo\""; br#""foo""#; // "foo"
b"foo #\"# bar";
br##"foo #"# bar"##; // foo #"# bar
相关推荐
Nimsolax2 分钟前
Linux文件fd
linux
tb_first1 小时前
k8sday13数据存储(1.5/2)
linux·运维·服务器·云原生·容器·kubernetes
逢生博客3 小时前
Ubuntu 安装 gvm 管理 Go 语言开发环境
linux·ubuntu·golang·gvm
多吃蔬菜!!!4 小时前
vscode 搭建C/C++开发环境搭建(linux)
linux·c语言·c++
李李李li4 小时前
Ubuntu 22.04 安装tensorrt
linux·tensorrt
该用户已不存在5 小时前
这几款Rust工具,开发体验直线上升
前端·后端·rust
phoenix09816 小时前
Linux入门DAY29
linux·运维
入秋6 小时前
Linux服务器安装部署 Nginx、Redis、PostgreSQL、Docker
linux·前端
Mr. Cao code7 小时前
使用Tomcat Clustering和Redis Session Manager实现Session共享
java·linux·运维·redis·缓存·tomcat
zcz16071278217 小时前
Linux 网络命令大全
linux·运维·网络