RT
还有一些,比如 AsRef 这些在什么情况下使用
1
Binwalker 287 天前
看标准库,已经说得很清楚了
Borrow: https://rustwiki.org/zh-CN/std/borrow/trait.Borrow.html AsRef 等一系列用于类型转换的: https://rustwiki.org/zh-CN/std/convert/index.html |
2
PTLin 287 天前
我感觉,Borrow 就作为泛型 map key 的时候才能用上,自己写函数的话这种场景也少。
AsRef 也就会作为文件路径参数里会出现,例如,p: impl AsRef<Path>。 |
3
nebkad 285 天前
譬如说,我要实现一个 RingBuffer ,可以 RingBuffer 自己分配 buffer 的内存,也可以接受外部输入的 buffer 。
我们可以发现,无论自己分配还是外部输入,RingBuffer 的大部分功能代码都是一样的,不太可能为此写两种不同的 RingBuffer 。那么,RingBuffer 就可以这么定义: ```Rust pub struct RingBuffer<B: BorrowMut<[u8]>>(B); ``` |
4
bli22ard OP @nebkad 这两天看了一下,有点理解 AsRef 了,那 pub struct RingBuffer<B: AsRef<[u8]>>(B); 应该也可以。这样 Borrow 存在的意义感觉又小了
|
5
nebkad 285 天前
@bli22ard #4 你会这么想是不是因为你没有注意到 这段代码
https://doc.rust-lang.org/src/core/borrow.rs.html#208-241 不可能有别的代码能替代这段标准库里的效果 |