rust语言基础学习使用Defaulttrait为类型提供缺省值
继续学习Rust标准库中常用的trait,在开始今天的学习之前,先把前面已经学过的trait做一个简单的复习: std::str::FromStr 用于字符串slice str到其他类型的转换,一个名称为Point的类型实现了FromStr trait后,调用Point::from_str()就能完成从str到Point的转换,也可以使用str.parse()隐式调用的形式。 std::ops::Deref 用于不可变引用的解引用操作,Deref用于不可变引用的解引用操作, 如 *v 。 实现Deref trait允许我们重载不可变引用的解引用运算符* 。 实现了Deref trait的智能指针可以被当做常规引用来对待,以便于访问其智能指针背后的数据。Rust为了提高在函数或方法传参时的便利性,提供了Deref强制转换(Deref coercion)功能。std::ops::DerefMut 用于可变引用的解引用操作, 如 *v = 1; 。 实现DerefMut trait允许我们重载可变应用的解引用运算符* 。 实现了DerefMut trait的智能指针可以被当做常规可变引用来对待。因为DerefMut tait继承了Deref trait,因此也具有"Deref强制转换功能"。std::convert::From 如果一个类型实现了From,则可以使用from实现从输入的T转换到该类型。实现From trait会自动为From中的T实现Into trait。使用From trait还可以用于简化错误处理,在进行错误传播当上下游错误类型不一致时,通过实现From trait,使用 ? 操作符自动实现下游到上游的错误转换。类似于 From和Into , std::convert::TryFrom 和 std::convert::TryInto 适用于易出错的转换场景,TryFrom, TryInto对比From和Into,多了个关联类型Error,try_from和try_into函数的返回值是Result,可以返回转换时出现的错误。
我们已经学习了FromStr, Deref, DerefMut, From, Into, TryFrom, TryInto这7个标准库中的trait,今天学习Default trait,使用Default trait可以为类型提供缺省值。
std::default::Default trait使用起来是十分简单的,先看一下它的定义: pub trait Default { fn default() -> Self; }
为类型实现Default trait有两种方式: 如果类型中的包含的其他类型都实现了Default trait,就可以通过derive宏 #[derive(Default)] 来为类型自动实现Default trait。手动实现Default trait
例1 : #[derive(Default)] //无法编译通过 enum不能derive Default pub enum PayStatus { Unpaid, Paid, }
例2 : #[derive(Debug)] pub enum PayStatus { Unpaid, Paid, } // 为枚举PayStatus手工实现 impl Default for PayStatus { fn default() -> Self { PayStatus::Unpaid } } // Price的所有字段类型都实现了Default, 因此可以derive Default #[derive(Default, Debug)] pub struct Price { original_price: f64, discounted_price: f64, } // Order的所有字段类型都实现了Default,因此可以derive Default #[derive(Default, Debug)] pub struct Order { id: i64, pay_status: PayStatus, price: Price, }
当类型实现了Default trait之后,在初始化时,可以部分初始化,其余部分使用 Default::default() 初始化。
例3 : fn main() { let order1 = Order::default(); let order2 = Order { id: 100, ..Order::default() }; println!("order1 = {:?}", order1); println!("order2 = {:?}", order2); }参考https://doc.rust-lang.org/std/default/trait.Default.html
利用Python帮你偷懒自动拍摄开机人照片发送指定邮箱笔记本电脑的提供了便携性,同时也带来了一些问题,最常见的就是弄丢电脑,或者是笔记本电脑未设置开机密码被其他人随意开机。那么我们如何解决这个问题呢?通过python,我们可以在笔记本
浙商证券给予国联股份买入评级20220117浙商证券股份有限公司于健,陈腾曦对国联股份进行研究并发布了研究报告国联股份更新点评数字经济载体,工业互联网龙头,本报告对国联股份给出买入评级,当前股价为117。89
小K播早报国务院积极建设城际充电网和高速路快充设施微软作价687亿美元收购动视暴雪科创板日报(上海,王古锋)讯,今日科创板早报主要内容有工信部将持续加强光伏产业顶层设计,推动产业智能升级中国人民银行称2022年加大对实体经济科技创新绿色发展的支持力度紫光国微预计
Nginx无法获取带下划线的请求头数据问题一前言1。1背景今天在开发中有这样一个请求前端需要在http请求中携带参数,后端获取参数进行解析并进行后续操作。1。2运行环境前后端分离前端Nuxtaxios后端Springboo
百世集团收到纽交所退市警告微软687亿美元并购动视暴雪出品搜狐科技编辑黄小芳今天是1月19日,周三。昨夜今晨,科技圈有哪些大事发生,请关注今日科技早报。百世收到纽交所退市警告1月18日,百世集团发布公告称,公司收到纽约证券交易所于20
颠覆者周鸿祎自传圆月书单颠覆者周鸿祎自传周鸿祎范海涛201722。6w字一本周鸿祎前半生传记,讲述从孩童到2011年360上市自己的创业过程。他的理想主义不达目的不罢休的执拗性格跃然纸上。虽是知名企业家却
Python其实很简单第五章基本数据类型编程的目的就是为了处理信息,信息则是由各种不同类型的数据表示的,对数据的进一步处理也会使信息更加丰富和有效。5。1变量前面已经提到过变量这属语,下面再进一步解释一下。在程序运行时,
第三届中国工业互联网大赛启动全国总决赛中新网北京1月19日电(记者刘育英)第三届中国工业互联网大赛19日正式启动全国总决赛,晋级全国总决赛的百强团队,将以团队线上比赛评委当场亮分的形式进行两天的激烈角逐,全国总决赛奖金
支付宝集五福又开始了,如何快速集五福呢?虎年到啦,又到了支付宝集五福的时候,今天19号至31号开展为期十二天的集五福活动,刚开始活动,便微博上了热搜。爱国福,和谐福,友善福,富强福,敬业福。其中敬业福比较难获得,每年呢,
facebook商城不是个新项目最近看到很多地方说facebook商城是个新项目,这个项目已经好几年了,下面我就给大家彻底地说一说这个项目,特别是小白,更应该看完。1。什么是facebook?他是一款聊天软件,老
山东建成并开通5G基站超过10万个大众网海报新闻记者吴军林济南报道1月19日,山东省政府新闻办召开新闻发布会,介绍2021年全省经济社会运行情况。2021年,全省固定资产投资累计增长6,两年平均增长4。8,分别好于