- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
基础语法
继续trait
- 我们也可以利用
trait
给其他的类型添加成员方法- 如下代码,
i32
根本不是我们写的 - 但是我们可以给
i32
增加方法
- 如下代码,
1 | rust复制代码 |
通用函数调用语法
1 | rust复制代码 |
- 以上代码之所以在
main
中,具体写到两个trait
去调用- 是因为如果只写一句
me.start()
会产生二义性 - 所以在调用的时候一定要注意,要对应好是哪个
trait
- 是因为如果只写一句
泛型
1 | rust复制代码 |
- 以上代码,其中
{:?}
为格式化控制符 - 数组*
1 | rust复制代码 |
- 以上代码:要注意数组长度、数组类型
- 数组
b
是赋值了十个0
- 数组
- 我们可以将数组切片看做专门指向数组的指针
- 可以理解成数组的一个
视图
- 例子中的数组是
[T; n]
类型的 - 指针类型是
&[T; n]
,通过内部编译将数组类型转换为切片类型&[T]
- 可以理解成数组的一个
1 | rust复制代码fn main() { |
- 上图代码其中变量
v
是[i32; 3]
类型- 变量
s
是&mut [i32; 3]
类型,这是占用的空间大小与指针都是相同的 - 当自动转为
&mut [i32; 3]
类型时,传入函数mut_arr
- 根据输出可以看出,占用的空间大小等于两个指针的空间大小
- 在函数的内部,修改了外部数组的v的值
- 变量
胖指针与DST
- 因为数组切片不只是包含指向数组的指针,切片本身还包含带长度的信息,所以叫
胖指针
- 胖纸真对应的是
动态大小类型
可简称缩写DST - 比如例子中用到的是不定长数组类型是
[T]
,对应的胖指针类型是&[T]
- 由于无法判断类型占用的空间的大小
- 所以不能在栈上声明一个不定长大小数组的变量实例
- 胖纸真对应的是
1 | rust复制代码fn example_slice(arr: &[i32]) { |
- 在上面代码中,
arr
的长度是5
- 其中
addr
是指向arr
的一个指针 - 使用函数将我们的数组直接转为了一个长度和一个指向源数组的地址
- 其中
Range
Range
代表一个区间- 使用
..
代表左开右闭的区间 - 如
1..7
代表1到7
- 使用
1 | rust复制代码fn main() { |
本文转载自: 掘金