Rust修仙之道 第三章:所有权境 · 断念诀
第三章:所有权境 · 断念诀
“天下术士皆惧‘所有权审判’,唯入此境者,能断执念、知归属、通幽微。”
顾行云在“灵气变通殿”闭关九日后,终于触碰到这门 Rust 真义——所有权(Ownership)。据说古籍称此技为“断念诀”,目的就是让修士断其依赖,知其归处,防止灵气流逸于未知空间。
一、所有权三律 · 三断心法
古卷记载所有权定律:
每一灵气之值(变量)只属于一名修士(所有者);
若所有者转交,他人即得此灵气之主权;
若原主不再持有,切不可再执念调用——否则业火 borrow checker 降临!
二、转移与赋予 —— 所有权转移术
顾行云尝试如下术式:
fn main() {
let spell = String::from("风刃术");
cast(spell); // 所有权转移至函数内
println!("{}", spell); // 编译错误!spell 已无所有权!
}
fn cast(name: String) {
println!("施展:{}", name);
}
原来,一旦将变量传入函数,原主便再无掌控之权。Rust 借此防止悬空灵气影响世界运行稳定性。
三、借用之道 —— 可控共享术
但若只是阅读灵气而不施法,是否能短暂借用?
fn observe(name: &String) {
println!("观察灵术:{}", name);
}
顾行云这才悟出:
&T
:不可变借用(读者灵视);&mut T
:可变借用(灵气改写权,单人独享);借用期间,所有权仍归本体,不生转移。
他推演术式示例:
let mut spell = String::from("雷击术");
amplify(&mut spell); // 借用并强化
fn amplify(s: &mut String) {
s.push_str("·超强版");
}
四、双重持有之禁 —— 编译器审灵者的怒火
顾行云一时贪功:
let mut qi = String::from("光流");
let r1 = &qi;
let r2 = &mut qi; // 编译怒吼:同时借用与变更,灵气紊乱!
借阅须诚,变更须独。一念贪心,便惹灵暴。
五、灵气归返术 —— 所有权回赠
如欲在函数中使用灵气,又不希望完全转移,该如何是好?顾行云悟出“归返术”:
fn empower(s: String) -> String {
println!("强化灵术:{}", s);
s
}
let incantation = String::from("火雨");
let incantation = empower(incantation); // 灵气归返
术式口诀 · 所有权之道
授而不归,灵失不现;借而无度,祸发源泉;断其念,得其境,行天下皆不乱。
️ 上一章 [下一章 待续 ️]
Rust修仙之道 第三章:所有权境 · 断念诀的更多相关文章
- 从零搭建Golang开发环境--go修仙序章
1. 什么是go语言 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态 .强类型.编译型语言 .Go 语 ...
- 走进shiro,构建安全的应用程序---shiro修仙序章
0. 写在前面 在最近的一个项目当中,我们基于Shiro实现我们系统的认证和授权.借此机会,写几篇博客,总结一下在本次实践当中遇到的问题,和较全面地学习一下Shiro的知识点, 1. 权限管理 权限管 ...
- 程序员编程艺术:第三章续、Top K算法问题的实现
程序员编程艺术:第三章续.Top K算法问题的实现 作者:July,zhouzhenren,yansha. 致谢:微软100题实现组,狂想曲创作组. 时间:2011年05月08日 ...
- 【黑金原创教程】【Modelsim】【第三章】理想就是美丽
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...
- [Effective Java]第三章 对所有对象都通用的方法
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 第三章 传奇的开始--Delphi(附读书笔记)
第三章 传奇的开始--Delphi "是惊世之作的Delphi让Borland重新站了起来,没有当初的Delphi,就没有今日的Borland!" "是Turbo Pas ...
- keras 修仙笔记一
对于牛逼的程序员,人家都喜欢叫他大神:因为大神很牛逼,人家需要一个小时完成的技术问题,他就20分钟就搞定.Keras框架是一个高度集成的框架,学好它,就犹如掌握一个法宝,可以呼风唤雨.所以学keras ...
- oo修仙之路
写在前面: 之前听说过oo这门课的威力,计院全体修仙现场的图也被转了不知多少遍,然而自己不亲身经历就不知这门课的难度所在.每次debug时耳边总会想起三国杀里面周瑜的话"挣扎吧,在血和暗的深 ...
- 第三章泛型集合ArrayList 和Hashtable
第三章泛型集集合 ArrayList 变量名 = new ArrayList(); //相当与一个容器 他的执行using 是 using System.Collections; 变量名.ADD( ...
- 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截
程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构 .要想在之后的江湖历练中通关,数据结构必不可少. ...
随机推荐
- 高格发票勾稽之BUG
select (INVNO) AS INVCODE, SDATE ,* FROM STKSALE1 WHERE LEN(INVSCODE) > 0 AND INVSCODE = '3100000 ...
- SpringAI vs JBoltAI:Java企业级AI开发的框架之争与实战选型
「SpringAI vs JBoltAI:Java企业级AI开发的框架之争与实战选型」 一.Java生态的AI困局:工具碎片化与工程化缺失 1. 技术断层:从API调用到全生命周期管理多数企业仍停留在 ...
- jmeter之请求体类型
一.当post方法的提交数据类型(content-type)为multipart/form-data,请求体为文件文件上传. fiddler抓包请求体的name对应jmerter文件上传的参数名称,f ...
- 高度混淆和多层嵌套的JSP案例免杀思路
免责声明:本文所涉及的技术仅供学习和参考,严禁使用本文内容从事违法行为和未授权行为,如因个人原因造成不良后果,均由使用者本人负责,作者及本博客不承担任何责任. 01 分析特征 目前webshell检测 ...
- 331K star!福利来啦,搞定所有API开发需求,这个开源神器绝了!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 「public-apis」是GitHub上最全面的免费API资源库,收录了涵盖商业.娱乐.教 ...
- K8s新手系列之Secret资源
概述 官方文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/ 在Kubernetes(k8s)中,Secret是一种用 ...
- 【HUST】网络攻防实践|6_物联网设备固件安全实验|实验三 FreeRTOS-MPU 保护绕过
文章目录 实验三 FreeRTOS-MPU 保护绕过 实验要求 子任务1 逆向分析StartFreeRTOS 打印 Flag 函数名称和地址 用于提权的函数名称和地址 填写的代码 模拟运行截图 **附 ...
- dashboard部署
1.下载dashboard资源请单 wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/re ...
- SQL 强化练习 (十三)
这几天都在整帆软报表, 还要弄 RPA ... 咱说呢, 这些破玩意, 是提升了业务人员的工作效率, 但, 极大降低了我的工作效率, 明明写代码就能解决, 非要各种 点点点... 文档也不全, 就很难 ...
- 彻底掌握 PCA 降维
PCA 这类的降维算法, 我算是接触好几年了有, 从我学营销的时候, 市场研究方面就经常会用到,相关的还有 "因子分析" 比如, 商品形象认知, 客户细分等场景. 其实多年前我就能 ...