这个项目用于记录《深入浅出Rust》的勘误以及读者反馈。深入浅出Rust读者交流群 497531779。
-
P8
代码
use std::prelude::*;
应改为use std::prelude::v1::*;
-
P18
第三块代码中
let var6 = 12usize; // i6变量是usize类型 let var7 = 0x_ff_u8; // i7变量是u8类型
注释应该分别为
var6
变量和var7
变量:let var6 = 12usize; // var6变量是usize类型 let var7 = 0x_ff_u8; // var7变量是u8类型
-
P27
tuple、struct、struct tuple 起的作用都是把几个不同类型的成员打包组合成一个类型
应改为
tuple、struct、tuple struct 起的作用都是把几个不同类型的成员打包组合成一个类型
-
P39
fn func(i: i32) -> bool
函数函数签名和函数体类型不匹配,函数参数名字与内部变量名字也不匹配。可以修正为以下代码:fn func(i: i32) -> std::cmp::Ordering { if i < 0 { std::cmp::Ordering::Less } else if i > 0 { std::cmp::Ordering::Greater } else { std::cmp::Ordering::Equal } }
-
P41
最下面那段代码,
println!("{}", v);
应该改为println!("{:?}", v);
:fn main() { let v = loop{}; println!("{:?}", v); }
-
P48
这个函数的返回类型可以是任何一个满足 Termination trait 约束的类型,其中
()
、bool、Result 都是满足这个约束的应改为
这个函数的返回类型可以是任何一个满足 Termination trait 约束的类型,比如
()
、Result<(), E>
等类型就是满足这个约束的 -
P89
倒数第二段代码,
while let
应该改为if let
:if let A(x) | B(x) = expr { do_something(x); }
-
P159
代码中的
vdata.set(10);
应改为data.set(10);
-
P161
绝对不可能让用户有机会通过
&Cetl<T>
获得&T
或者&mut T
其中,
&Cetl<T>
应改为&Cell<T>
-
P187
……避免了Arc的运行效率损失, 是非常有用的scoped函数与spawn函数的区别就在于……
应改为
……避免了Arc的运行效率损失, 是非常有用的。scoped函数与spawn函数的区别就在于……
本页最后一句,只要用户有可能在不使用 unsafe 构造出内存安全
应改为
只要用户有可能在不使用 unsafe 时构造出内存不安全
-
P210
究竟准是准的子类型
应改为
究竟谁是谁的子类型
-
P211
类型
fn(T)->U
对于泛型参数T
具备协变关系应改为
类型
fn(T)->U
对于泛型参数T
具备逆变关系类型
fn(T)->U
对于泛型参数U
具备逆变关系应改为
类型
fn(T)->U
对于泛型参数T
具备协变关系 -
P212
PhantomData<'aT>
应该改为PhantomData<&'a T>
-
P257
其次尝试选择
fn call_mut(&self, args:Args)
应改为
其次尝试选择
fn call_mut(&mut self, args:Args)
-
P279
图片内箭头指向位置错乱了
-
P298
由于Rust设计的改变,跟
PinMut
有关的都需要改一下。具体包括PinMut<'a, T>
应改为Pin<P>
self: PinMut<Self>
应改为self: Pin<&mut Self>
PinMut<XXGenerator>
应改为Pin<&mut XXGenerator>
PinMut
应改为Pin
-
P299
最上面的代码块中
fn poll(self: PinMut<Self>, cx: &mut Context) -> Poll<Self::Output>
应改为:
fn poll(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output>
倒数第六行,
PinMut<Self>
应改为Pin<&mut Self>
倒数第五行,
PinMut
应改为Pin
-
P300
第2行和第3行,
PinMut<T>
改为Pin<&mut T>
。