说到这个话题
其实这两个的效果类似
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 方法
字符串切片
实现了克隆的类型
以及切片
可以用to_owned方法
实现和as_ref相反的转换
它的本质就是克隆
随带着类型转换以及拥有所有权
你了解的是怎样的呢,欢迎交流
,