pull/152/head
sunface 3 years ago
commit 20ab5649e0

@ -267,8 +267,8 @@ pub fn add_one(x: i32) -> Option<i32> {
}
```
此处的**[`Option`]**就是一个链接,指向了标准库中的`Option`枚举类型,有两种方式可以进行跳转:
- 在IDE中使用`Command + 鼠标左键`(mac系统下)
此处的 **[`Option`]** 就是一个链接,指向了标准库中的`Option`枚举类型,有两种方式可以进行跳转:
- 在IDE中使用`Command + 鼠标左键`(mac系统下)`CTRL + 鼠标左键`(win系统下)
- 在文档中直接点击链接
再比如,还可以使用路径的方式跳转:
@ -409,7 +409,7 @@ use art::utils::mix;
fn main() {
let blue = PrimaryColor::Blue;
let yellow = PrimaryColor::Yellow;
println!("{:?}",mix(blue, yellow));
println!("{:?}",mix(blue, yellow));
}
```

@ -13,7 +13,7 @@
一箩筐的理由~~ 让我们先从第二点讲起。
#### 为外部类型实现外部特征
在之前的章节中,我们有讲过如果在外部类型上实现外部特征必须使用`newtype`的方式,否则你就得遵循孤儿规则:要为类型`A`实现特征`T`,那么`A`或者`T`必须有一个在当前的作用范围内。
在之前的章节中,我们有讲过如果在外部类型上实现外部特征必须使用`newtype`的方式,否则你就得遵循孤儿规则:要为类型`A`实现特征`T`,那么`A`或者`T`必须至少有一个在当前的作用范围内。
例如, 如果想使用`println!("{}",v)`的方式去格式化输出一个动态数组`Vec`,以期给用户提供更加清晰可读的内容,那么就需要为`Vec`实现`Display`特征,但是这里有一个问题:`Vec`类型定义在标准库中,`Display`亦然, 这时就可以祭出大杀器`newtype`来解决:
```rust
@ -56,12 +56,12 @@ impl Add for Meters {
}
}
fn main() {
let d = calculate_distance(Meters(10), Meters(20));
println!("{}",d);
let d = calculate_distance(Meters(10), Meters(20));
println!("{}",d);
}
fn calculate_distance(d1: Meters,d2: Meters) -> Meters {
d1 + d2
d1 + d2
}
```
@ -79,7 +79,7 @@ struct Meters(u32);
fn main() {
let i: u32 = 2;
assert_eq!(i.pow(2),4);
assert_eq!(i.pow(2),4);
let n = Meters(i);
// 下面的代码将报错,因为`Meters`类型上没有`pow`方法

@ -17,7 +17,7 @@
*Cargo.toml* 中的 `edition` 字段表明代码应该使用哪个版本编译。如果该字段不存在,其默认为 `2021` 以提供后向兼容性。
每个项目都可以选择不同于默认的 2021 edition 的版本。这样,版本可能会包含不兼容的修改,比如新版本中新增的关键字可能会与老代码中的标识符冲突并导致错误。不过,除非你选择应用这些修改,否则旧代码依然能够被便衣,即便你升级了编译器版本。
每个项目都可以选择不同于默认的 2021 edition 的版本。这样,版本可能会包含不兼容的修改,比如新版本中新增的关键字可能会与老代码中的标识符冲突并导致错误。不过,除非你选择应用这些修改,否则旧代码依然能够被编译,即便你升级了编译器版本。
所有 Rust 编译器都支持任何之前存在的编译器版本,并可以链接任何支持版本的包。编译器修改只影响最初的解析代码的过程。因此,如果你使用 Rust 2021 而某个依赖使用 Rust 2018你的项目仍旧能够编译并使用该依赖。反之若项目使用 Rust 2018 而依赖使用 Rust 2021 亦可工作。

Loading…
Cancel
Save