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江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构 .要想在之后的江湖历练中通关,数据结构必不可少. ...
随机推荐
- 一个检查左右括号是否配对的语法检查器(c语言)
目录 一.题目如下 二.解题思路 三.代码实现 四.测试结果 一.题目如下 通过键盘输入一个包括 '(' 和 ')' 的字符串string ,判断字符串是否有效.要求设计算法实现检查字符串是否有效,有 ...
- 大量数据topk-分桶+堆+多路并归解决方案
利用分桶.堆与多路归并解决 TopK 问题:结果处理阶段解析 在处理大规模数据时,TopK 问题是一个常见且具有挑战性的任务,即从海量数据中找出最大(或最小)的 K 个元素.为了高效地解决这个问题,我 ...
- java串口通信
实体 package com.hwd.campus.common.common.utils.http; import gnu.io.SerialPort; /** * 串口参数封装类 * @autho ...
- 1.3K star!VisActor团队开源神器,3秒生成商业级图表,程序员直呼真香!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 项目速览 VChart 是VisActor团队推出的高性能可视化解决方案,GitHub斩获2 ...
- VMware 17 Pro 虚拟机从下载到安装的超详细教程,解决你的所有疑问
VMware 17 Pro介绍 VMware 17 Pro是一款功能强大的虚拟机软件,适用于开发人员.测试人员.系统管理员和教育机构.它可以在一台计算机上模拟运行多台虚拟机,支持Windows.Lin ...
- 一款Windows平台上的开源Ark工具——OpenArk
简介 OpenArk是一款Windows平台上的开源Ark工具. Ark是Anti-Rootkit(对抗恶意程序)的简写, OpenArk目标成为逆向工程师.编程人员的工具,同时也能为那些希望清理恶意 ...
- 4G模块——大夏龙雀DX-CT511-A使用记录
4G模块--大夏龙雀DX-CT511-A使用记录 加回车换行 115200波特率 重启: AT+RESET 6.关闭HTTP服务: AT$HTTPCLOSE 关闭网路 AT+NETCLOSE 1.TC ...
- JavaScript编程的10+最佳实践解决方案
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 操作系统:linux -- 虚拟文件系统如何管理文件
本节来瞧下Linux是如何管理文件,也验证下Linux那句口号:一切皆文件 为此,我们需要首先搞清楚什么是 VFS,接着理清为了实现 VFS 所用到的数据结构,然后看看一个文件的打开.读写.关闭的过程 ...
- odoo知识图谱
最近项目交付后,准备将系统整个知识点整理一下,下面是目录,后面针对目录编写文档--todo