说到这个话题

其实这两个的效果类似

as_ref更智能一些

一般不推荐用&T

更何况有时候需要&&T

这种写法就很不友好

rust就提供了相当的as_ref

as_ref从一个引用创建一个引用

相当于转换

但是有时候根据情况

还会在背后做一些事情

比如如果内部类型是引用

编译器会自动解引用

比如从string解引到切片

然后再引用就相当于&

不影响原数据不会发生借用

as_mut也是

只不过它指向的数据可以被修改

一般用于option,result,box,rc,Arc,vec,pin,ptr,String,,slice实现了asref特性的类型上。

asref和borrow方法签名是一样的

但是borrow还可以接受值类型

而且借用的值和有所有权的值

需要哈希顺序相等

所以当需要借用结构的字段

就只能用as_ref了

另外还有一个as_deref

看起来就很类似

在某些场合和as_ref的结果是一样的

as_deref相当于解引用*

但是返回结果是引用

这是因为deref用在智能指针上

随带着类型转换

所以一般用于获取

智能指针option,result,pin,lazy,cow类型上

指向的数据

as_deref_mut是可修改版本的

返回指向内部数据的指针

和ref有关联的还有to_owned 方法

rust编程注意事项:Rust编程语言里有T为什么还有as(1)

字符串切片

实现了克隆的类型

以及切片

可以用to_owned方法

实现和as_ref相反的转换

它的本质就是克隆

随带着类型转换以及拥有所有权

你了解的是怎样的呢,欢迎交流

,