当前位置: 首页 > news >正文

昆山做网站优化电商网络营销

昆山做网站优化,电商网络营销,做网站做58好还是赶集好,不封号的电销系统简介 borrow trait 是处理借用(即其它语言中的引用)的 trait,变量的所有权不会转移.泛型定义如下: pub trait Borrow<Borrowed: ?Sized> {/// Immutably borrows from an owned value.fn borrow(&self) -> &Borrowed; }其中包含一个 borrow(&self)的方…

简介

borrow trait 是处理借用(即其它语言中的引用)的 trait,变量的所有权不会转移.泛型定义如下:

pub trait Borrow<Borrowed: ?Sized> {/// Immutably borrows from an owned value.fn borrow(&self) -> &Borrowed;
}

其中包含一个 borrow(&self)的方法,将变量的类型 T 转换为 &Borrowed 类型.

默认实现

rust 提供了类型 T 的默认实现,如下:

impl<T: ?Sized> Borrow<T> for T {fn borrow(&self) -> &T {self}
}impl<T: ?Sized> Borrow<T> for &T {fn borrow(&self) -> &T {&**self}
}impl<T: ?Sized> Borrow<T> for &mut T {fn borrow(&self) -> &T {&**self}
}

这里创建一个自定义类型来说明 borrow 的默认实现,如下

    #[test]fn test_default_borrow() {struct MyType;let my_type = MyType;let _: &MyType = my_type.borrow();let _: &MyType = (&my_type).borrow();let my_type = &MyType;let _: &MyType = my_type.borrow();let _: &MyType = (*my_type).borrow();let my_type = &mut MyType;let _: &MyType = my_type.borrow();let _: &MyType = (*my_type).borrow();}

自定义 borrow trait

String 类型就实现了自己的 borrow trait,如下:

impl Borrow<str> for String {#[inline]fn borrow(&self) -> &str {&self[..]}
}

即将 String 类型转换为了 &str 类型.

可以自己对类型实现 Borrow trait,如下:

#[allow(dead_code)]
struct Person {name: String,age: u8,
}impl Borrow<str> for Person {fn borrow(&self) -> &str {self.name.as_str()}
}

实现Borrow的一个要求是,借用值的HashEqOrd与拥有值的HashEqOrd相等。这里可以解释为,如果两个用户 Person 的借用值 name 相同,则认为是同一个人.

使用场景

1. 对函数参数进行类型扩展

    #[test]fn test_origin_check() {fn origin_check(s: &String) {assert_eq!("Hello", s);}let s = "Hello".to_string();origin_check(&s);}

例如,上面的函数origin_check接受 String 类型的参数,但是如果想复用这个函数,需要将其它类型的参数也传给origin_check函数该怎么实现呢?

先修改成第一个版本, 添加s.borrow(), 如下

    #[test]fn test_origin_check_1() {fn origin_check(s: &String) {let borrowed: &str = s.borrow();assert_eq!("Hello", borrowed);}let s = "Hello".to_string();origin_check(&s);}

这样只要确保类型 s,都实现了 borrow()方法,且返回值的类型都为 &str就可行了.

再修改成第二个版本, 这样就可以将任何实现了Borrow<str>类型的变量作为参数传递给函数check,如下:

    fn check<K>(s: K)whereK: Borrow<str>,{let borrowed: &str = s.borrow();assert_eq!("Hello", borrowed);}#[test]fn test_borrow_as_param() {// 支持 String 类型,因为 String 实现了 Borrow trait,可以转换为 &strlet s = "Hello".to_string();check(s);// 支持 &str 类型,因为 rust 实现了类型 T 的默认 borrow 实现, 转换为 &str 类型let s = "Hello";check(s);// 支持 Person 类型,因为 Person 实现了 Borrow trait, 可以转换为用户名属性的 &str 类型let s = Person { name: "Hello".to_string(), age: 18 };check(s);}
http://www.ritt.cn/news/21583.html

相关文章:

  • 网站制作项目执行免费注册网站有哪些
  • 外贸网站b2c合肥百度seo代理
  • wordpress每篇文章加水印旺道seo营销软件
  • 贵州网站建设设计长春关键词优化公司
  • 网站建设 上海浦东网上做推广怎么收费
  • 美女色情做视频网站营销型网站建设
  • 开源项目网站seo技术建站
  • 做美团一样的网站需要多少钱2023广州疫情最新消息今天
  • 眼科医院网站优化服务商网络营销推广公司名称
  • 企业网站开发与管理交换友情链接
  • 网站设计与开发怎么做搜索引擎数据库
  • 成都网站建设 城免费建站免费推广的网站
  • 关系营销案例100例seo整体优化步骤怎么写
  • 营销型网站上海制作营销战略
  • 南昌网站建设培训南昌seo优化
  • 全国最新实时疫情seo课堂
  • linux网站建设技术指南 pdf北京官网seo
  • 企业网站类型指数函数求导
  • 头条网站怎么做网站怎么优化seo
  • 十大免费视频素材网站郑州技术支持seo
  • 软件发展的四个阶段关键词优化排名网站
  • 做蛋糕视频教学网站网站seo运营
  • 网站建设专家证书东莞疫情最新消息今天又封了
  • 东莞网站设计制作西安网站制作推广
  • 广东省住房和城乡建设厅网站首页万网域名注册官网
  • dw中网站建设的基本流程dw网页制作详细步骤
  • 盛泽网站建设seo优化常识
  • 淘客怎么样做网站百家号优化
  • 如何做行业网站如何建立自己的网站平台
  • 如何通过阿里云自己做网站九江seo