Rust 面向对象与模块化
泛型
如果你要使用一个禀赋的方法,
那么你需要将该禀赋引入当前的作用域中.
完全限定语法
类型或禀赋::方法名
<类型 as 实现的某个禀赋>::那个禀赋的方法名
同名方法调用顺序
对于对象.方法名(参数):
编译器检查它是否可以直接调用
类型名::方法名(对象接收器, 参数), 称之为值方法调用.
如果 类型名 里直接有方法名的定义,
则调用类型名::方法名(对象接收器, 参数).
如果 类型名 实现了 禀赋名. 恰好 禀赋名
里有 方法名 的定义,
则调用 <类型名 as 禀赋名>::方法名(对象接收器, 参数),
如果第一步失败,那么编译器会尝试增加自动引用,例如会尝试以下调用:
<&类型名>::方法名(对象接收器, 参数) 和
<&mut 类型名>::方法名(参数),
称之为引用方法调用.
如果第二步失败,编译器会试着解引用 类型名 , 然后再进行尝试.
若 类型名: Deref<Target = 目标类型名>,
那么编译器会使用 目标类型名 类型从第一步开始继续尝试,
称之为解引用方法调用 ...
Rust 类型转换与智能指针
类型转换
转换不具有传递性 就算 类型甲 as 类型乙 as 类型丙
是合法的,也不能说明 类型甲 as 类型丙 是合法的.
对于带有禀赋约束的泛型,以及禀赋对象,隐式类型转换
不会 发生.
必须手动把一个不满足禀赋约束或禀赋对象的类型转换成一个满足的.
From 与 Into
From 与 Into 是两个相关的禀赋。当类型 甲
实现 From 到 类型 乙 后,乙 等于实现了
Into 到 甲.
对复杂类型进行隐式转换就是调用得对应的 from 函数.
解引用
任何实现了 Dref 或 DrefMut
禀赋的类型都可以使用 * 操作符解引用.
虽然名义上是 * 进行的解引用操作,事实上 Rust
会在真正的 * 之前插入一个 dref() 函数的调用,
因此实现的时候需要让函数返回一个能够继续被解引用的类型.
这么做的原因是如果让 dref() 返回一个值,
那么原来的对象就失去了对这个值的所有权了.
鉴于解一个引用就丢所有权这件事情有点奇怪,因此 Rust
要求 dref() 返回另一个能被解引用的对象.
这条解引用的调用链会在对普通的指针和引用解引用后停止.
这些内置的类型有编 ...
Rust 对象特性
作用域
函数不能够访问外部作用域,但是闭包可以捕获后访问.
可变性
当闭包被赋给一个变量后,如果想用那个变量以函数方式调用闭包,
变量必须可变.
所有权
对于变量甲,如果 let mut 甲: 某类型 = 初始化代码
&甲: 更适合被称作甲的静态共享引用.
&mut 甲: 更适合被称作甲的静态独占引用
在甲本身被读 / 写之后,如果存在一个甲的静态独占引用被解引用 (即被使用),
对甲读 / 写的代码非法.
对于没有 Copy 禀赋的类型,赋值 (还有传参,
传参属于特殊的赋值) 会转移所有权.
对于有 Copy 禀赋的类型,赋值会复制一个新的对象.
其实 Copy 禀赋没有任何需要实现的方法,
只是表示这个类型的对象保存在栈上,能够只用 memcpy 执行
bit 级别的复制和覆写.
因此,一个类型不能同时具有 Copy 禀赋和 Drop 禀赋.
否则无法保证内部资源的有效性.
如果想要自定义复制的细节,使用 Clone 禀赋.
An Introduction of Sed
Sed is a common tool in unix world. This article briefly tells about the basic of sed usage.
Powershell 重点
https://www.powershellgallery.com/
$psitem
In powershell, code block(an AST) can be passed as an argument.
operator
-not: logic not
-or: logic or
-and: logic and
-lt: string and number less than
-gt: string and number greater than
-eq: string and number equal
-ne: string and number not equal
-ge: string and number greater equal
-le: string and number less than
These operators are case-insensitive when used with strings. This
means that the results will be the same whether the letters are
capita ...
Rust 宏
这篇文章会介绍 Rust 宏的背景, 概念以及使用.
一口甜与十口苦
Rust的再借用, 以及隐式再借用机制
Rust 语法的只言片语
学习 Rust 中有必要记下来的片段.
Rust 生命周期详解
生命周期是 Rust 的一个重要概念. 也是 Rust 保证内存安全和消除未定义行为措施的一环. 虽然生命周期的概念在各种 RAII 语言, 如 C++ 中, 都有所涉及. 但是只有 Rust 把对它的检查内嵌到了语法的层面. 因此, 掌握生命周期对于编写高效率的 Rust 代码至关重要.
Maven Fundamentals
Maven 基础
设置
Maven 依靠项目根目录下的 pom.xml 来配置.
设置模版
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <groupId>组标识符</groupId> <artifactId>制品标识符</artifactId> <version>版本号</version> <modelVersion>模型版本号</modelVersion> ...