Rust: Lifetime小心要你命!
很多地方,并没有把lifetime的例子讲得更有普遍性,看了还是一知半解。
没有引用,也就是没有lifetime。我想用引用也是为了更加流畅,运行更快。如果你不想用lifetime,你只需不用或者尽量不用引用,也就ok了。
当然,今天,还是希望更多探讨一下让人一知半解的lifetime。
典型的举例(RustPrimer一书中):
fn foo<'a, 'b: 'a>(x: &'a str, y: &'b str) -> &'a str {if true {x} else {y}
}
但是,更普遍的例子(以下都可以编译通过):
struct foo<'a> {name: &'a str,old: f32,
}
//以上在的例子有普遍性,因为有引用的类型。
//对foo实现具体的方法
impl<'a, 'b: 'a> foo<'a> {// 无返回函数的类型,&'a self可以用 &self代替,即不需要显性生命周期的表达。fn get_info(&'a self) {let info = format!("{0}{1}", self.name, self.old);println!("{}", info);}// 返回的是非引用类型,同样,也不需要显性生命周期的表达。fn insert_info(&'a self, input: &'a str) -> String {format!("{0}{1}{2}", self.name, self.old, input) //=>String}//返回的是非引用类型,也不需要显性生命周期的表达。fn insert_info1(&self, input: &str, input2: &str) -> String {format!("{0}{1}{2}{3}", self.name, self.old, input, input2)}// 返回的是引用,涉及多个引用,需要有显性生命周期的表达。fn insert_info2(&'a self, input: &'a str) -> &'a str {let info2 = format!("{0}{1}{2}", self.name, self.old, input);let info3 = self.name.to_string() + input;println!("{} {}", info2,info3);// 是否可以把info2,info3的引用,做为返回值呢?// info2,info3的作用域都在本函数中,生命周期不足。// &info2 =>你想把info2的引用作为返回值?=>info2 does not live enough long// &info3 =>你想把info3的引用作为返回值?=>info3 does not live enough longinput //这个做为返回值是可以的,生命周期'a,刚好匹配。}
}
对于fn insert_info2函数,如果的确想把info2或info3的结果返回,那就只能选型值返回,而不能是引用返回,比如象fn insert_info函数。
Rust: Lifetime小心要你命!相关推荐
- 从C++转向Rust:两大主题值得关注!
导语 | 云加社区祝大家新年快乐!新春假期结束的第一篇干货,为大家带来的是从C++转向Rust主题的内容.在日常的开发过程中,长期使用C++,在使用Rust的过程中可能会碰到一些问题.本文是From ...
- 【Unity3D】粒子系统ParticleSystem
1 简介 拖尾(TrailRenderer).线段渲染器(LineRenderer).粒子系统(ParticleSystem)是 Unity3D 提供的三大特效,其中粒子系统的功能最为强大,特效也最炫 ...
- 笔记本开机只有电池灯亮还可以听见工作声音就是屏幕也没有反应是怎么回事
如果外接显示器能够有信号输出的话,只能证明显卡或芯片组显示功能是没有问题的,并不能说明液晶屏是否出了故障.请外接显示器开机进入操作系统后,按住Fn功能键再按切屏键来转换输出设备试一试,如果切了几次液晶 ...
- Rust语言Ownership,Reference和Lifetime详解
Ownership References and Borrowing Lifetime 1. Ownership rust的ownership系统是它区别与其它语言的最主要的特征.只有理解了owner ...
- Rust:生命周期标注(lifetime annotation)
Rust语言中的所有引用(referrence)都有一个lifetime,指得是该引用有效的作用域(scope).通常情况下,lifetime都是隐式的,rust编译器会根据一些简单的规则自己推断.但 ...
- Programming Rust Fast, Safe Systems Development(译) 引用(第五章 完)
Libraries cannot provide new inabilities. -Mark Miller 我们已经看到的所有指针类型 - 简单的Box 堆指针,以及String和Vec值内部的指针 ...
- rust石头高墙要维护吗_那些害死Haskell的,也会害死Rust
原标题:那些害死Haskell的,也会害死Rust 作者 | Alexander Granin 译者 | 无明 0编者按 本文作者的中心思想不是唱衰 Rust 语言,正相反,他非常看重 Rust 语言 ...
- Rust太难?那是你没看到这套Rust语言学习万字指南!
摘要:从开发环境.语法.属性.内存管理和Unicode等五部分,为你带来一份详细的Rust语言学习的精华总结内容. 一.Rust开发环境指南 1.1 Rust代码执行 根据编译原理知识,编译器不是直接 ...
- 腐蚀rust电脑分辨率调多少_腐蚀Rust怎么设置画面 腐蚀Rust提高帧数画面设置方法...
腐蚀Rust这个游戏的细节取决于图像质量也就是我们进入游戏的时候可以选择画质,这里为大家带来腐蚀Rust画质设置教程. 图像质量 1~3为一个大档 4~5是一个大档 4以上你在游戏里面的画面会显示更多 ...
- TIOBE 新榜单:Python 超越 Java 重回第二,Rust 崛起
作者 | 苏宓 出品 | CSDN(ID:CSDNnews) TIOBE 官方最新发布了 5 月的编程语言榜单,不妨一起来看一下本月榜单中又有哪些最新的变化呢? Python 重回第二 和 4 月相比 ...
最新文章
- C++使用命名空间中成员的三种方式
- Django 流式响应中文csv样例
- Python批量添加库搜索路径
- JAVA复习(二维数组——快排——迷宫)
- java lock可重入_Java源码解析之可重入锁ReentrantLock
- php5 mongodb,ThinkPHP5之Mongodb使用技巧
- php7 str split,PHP7.4新特性预览
- mipi 调试经验【转】
- 这是自己的第一篇博客
- java8流_Java8Stream流详解
- solr 使用记录 - solr dataimporter 定时任务
- Oracle增量跟新
- Fiddler之文件代理
- A*B Problem II
- Matlab图像处理--低通滤波器的Matlab实现及透视图
- c语言编程创意表白,C语言和图形界面编程打造——浪漫的表白程序
- 七宗罪----人性本恶
- usb万能驱动win7_win10改win7教程
- 模仿QQ侧滑样式,借鉴了张鸿洋的最简单侧滑
- 基于Vue的图片裁剪 vue-cropper
热门文章
- 如何批量从Excel文件中导入数据到数据库(二)
- ECharts-第一篇最简单的应用
- 基本排序算法(冒泡,选择(希尔),插入,快速,归并,堆,二分查找)
- 初识Git 如何使用Git将本地项目上传到Github
- 2014年java软件project师面试题收集
- Vue学习笔记 出自http://www.cnblogs.com/chenzechuang/p/6687267.html#top
- python--getitme\setitem 支持索引与分片
- 不同浏览器对URL最大长度的限制(转)
- Vuforia的ARcamera通过识别人工标识码出现虚拟物体后在其相机视野中不显示人工标识码
- 《图解算法》第11章之 接下来如何做