rust学习19——高级特性

2022-06-26  本文已影响0人  yozosann

Unsafe超能力:

用unsafe关键字创建一个块儿:

注意:

解引用原始指针

调用unsafe函数或者方法

创建unsafe代码的安全抽象

函数包含unsafe并不一定将整个函数标记为unsafe。
将unsafe代码块包裹在函数中是常见抽象。


image.png

使用extern函数调用代码

从其他语言调用Rust接口

访问或者修改一个可变静态变量

静态变量:

常量和不可变静态变量的区别

实现不安全的trait

何时使用unsafe代码

高级Trait

在Trait定义中使用关联类型来指定占位类型

和泛型的区别

泛型:

关联类型:

默认泛型参数和运算符的重载

运用场景

完全限定语法(fully qualified syntax)



指定对应的triat,然后传入引用。
但是上面的例子得以实现时因为fly的参数是self,但是如果没有参数,怎么能调用其他trait的方法?
这个时候就用到了完全限定语法: <Type as Trait>::function(xx, xxx);


使用supertrait来调用其他trait

使用newtype模式在外部类型上实现外部trait

高级类型

使用newtype模式实现类型安全和抽象

newtype可以:

使用类型别名来创建同义词

Never类型

动态大小和Sized Trait

Rust使用动态大小类型的通用方式

另一种动态大小的类型:Trait

Sized Trait

来确定一个类型的大小是否在编译时已知。

?Sized Trait约束

高级函数和闭包

函数指针

函数指针和闭包的不同

返回闭包

函数和宏的差别

macro_rules! 声明宏

例子:


基于属性来生成代码的过程宏

自定义derive宏

hello_macro:


Pancakes希望最终能写成:


如果没有hello_macro_derive,它只能写成:



就得写默认实现。

那么hello_macro_derive怎么实现:
他的依赖:


类似属性的宏

类似函数的宏

上一篇 下一篇

猜你喜欢

热点阅读